前提・実現したいこと
現在、「PythonとKerasによるディープラーニング」という本で勉強をしています。
p258にあったコードでpaddingのパラメータが正しく動いていないのではと思うところがあります。
layers.add()の所できちんと出力のサイズが揃う理由についてご教授いただきたいです。
発生している問題・エラーメッセージ
エラーは起きていないのですが、residual = layers.Conv2D()の所で padding='same'としてもpadding='valid'としてもyの出力とサイズがあってしまいます。 padding='same'は入力のサイズと同じになるようにパディングを行うはずですので、 conv2d_2 (Conv2D) のOutput Shapeは(None, 374, 500, 128)となり、add層の所でサイズの違いによるエラーが出ると思うのです。
該当のソースコード
python
1from tensorflow.keras import Input, layers 2from tensorflow.keras.models import Model 3 4x = Input(shape=(374, 500, 3)) 5y = layers.Conv2D(128, 3, activation='relu', padding='same')(x) 6y = layers.Conv2D(128, 3, activation='relu', padding='same')(y) 7y = layers.MaxPooling2D(2, strides=2)(y) 8residual = layers.Conv2D(128, 1, strides=2, padding='same')(x) 9output = layers.add([y, residual]) 10 11model = Model(x, output) 12model.summary()
出力結果
Model: "functional_1" __________________________________________________________________________________________________ Layer (type) Output Shape Param # Connected to ================================================================================================== input_1 (InputLayer) [(None, 374, 500, 3) 0 __________________________________________________________________________________________________ conv2d (Conv2D) (None, 374, 500, 128 3584 input_1[0][0] __________________________________________________________________________________________________ conv2d_1 (Conv2D) (None, 374, 500, 128 147584 conv2d[0][0] __________________________________________________________________________________________________ max_pooling2d (MaxPooling2D) (None, 187, 250, 128 0 conv2d_1[0][0] __________________________________________________________________________________________________ conv2d_2 (Conv2D) (None, 187, 250, 128 512 input_1[0][0] __________________________________________________________________________________________________ add (Add) (None, 187, 250, 128 0 max_pooling2d[0][0] conv2d_2[0][0] ================================================================================================== Total params: 151,680 Trainable params: 151,680 Non-trainable params: 0 __________________________________________________________________________________________________
試したこと
・Inputのサイズを(None, 375, 500, 3)にして出力のサイズが違う者同士だとadd層で結合ができないことを確認
・Conv2Dの公式ドキュメントを確認
・addの公式ドキュメントを確認
・padding add などのキーワードを含めて検索をしたものの、該当するような記事を見つけられませんでした。
補足情報(FW/ツールのバージョンなど)
windows10 conda仮想環境
すべてconda installにて環境構築
python 3.8.11
tensorflow 2.3.0
tensorflow-base 2.3.0
tensorflow-estimator 2.6.0
tensorflow-gpu 2.3.0
numpy 1.19.4
jupyter 1.0.0
jupyter_client 7.0.1
jupyter_console 7.0.1
jupyter_core 4.8.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/04 15:37 編集
2021/11/04 15:52
2021/11/04 16:05
2021/11/05 03:46
2021/11/05 14:38
2021/11/06 07:45