###AutoEncorderのようなレイヤーをマージさせるときの処理について
前回質問した内容と関連する質問をさせていただきます。
AutoEncorderの実装を考えております。
Conv2D_1、Conv2D_2、Conv2D_3、とConv2Dを繰り返した後、
Conv2D_transpose(もしくはUpSampling2D)を繰り返すようなことを考えております。
Conv2D_transposeをするときにConv2Dにより畳み込まれた結果をconcatenateにてマージすることを考えております。
前回の質問にて、padding='same'にするといいと回答をいただきました。
画像サイズによっては問題なく動作するのですが、サイズによっては
マージする際に、Conv2Dの結果とConv2D_transposeの結果の画像サイズが合わせる必要があるため質問させていただきました。
マージするレイヤのピクセル数が一致していないみたいです。
例えば、1回の畳み込み・プーリングにて、Input画像の1/2になるようなレイヤーがあったとします。
それが4回続いたとします。
1回目畳み込み・プーリング
2回目畳み込み・プーリング
3回目畳み込み・プーリング
4回目畳み込み・プーリング
その後、4回目の畳み込みに対して逆畳み込みをし、
画像サイズを3回目の畳み込み・プーリングの結果と同じにします。
4回目の結果に対し、1回目逆畳み込み(3回目畳み込み・プーリングと同じ値にする)
その後、畳み込んだレイヤーとマージをして畳み込んでいきます。
以下、例です。
1回目逆畳み込み x 3回目畳み込み (マージ)
2回目逆畳み込み x 2回目畳み込み (マージ)
3回目逆畳み込み x 1回目畳み込み (マージ)
もちろんマージする際は、画像の縦横は一致している必要があります。
マージするとき、Input画像の画像ファイルのサイズによってエラーが起きてしまいました。
エラーの内容は下記です。(入力画像サイズを1500とした場合です)
"concat" mode can only merge layers with matching output shapes except for the concat axis. Layer shapes: [(None, 374, 374, 256), (None, 375, 375, 128)]
★問題ある例:画像サイズが1500の場合★
1回目畳み込み・プーリング:750
2回目畳み込み・プーリング:375
3回目畳み込み・プーリング:187.5 (187と解釈)
3回目の結果に対してアップサンプリング(2倍)
⇒374
上記の結果に対して、2回目畳み込み・プーリングとマージしようとすると
374と375のため、サイズが一致しないため、エラーになったと考えました。
それでは、374となってしまったほうに対して(1,1)のZero Paddingをすると、問題なく動作するのだろうかと思い、試してみたところ、以下の結果となりました。
"concat" mode can only merge layers with matching output shapes except for the concat axis. Layer shapes: [(None, 378, 378, 256), (None, 375, 375, 128)]
375を上回り、378となってしまいました。
このようなときはどのように対処すればいいのでしょうか?
★3回目畳み込み・プーリング:187.5 (187と解釈)★
の部分が悪さをしていると思うのですが。。。
以上、よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/11 01:33
2017/12/11 02:34
2017/12/11 04:50
2017/12/11 07:37