現在、Keras (オートエンコーダー) を使用して CNN モデルを開発しています。このタイプの入力は shape(47,47,3)です。つまり、3 (RGB) レイヤーの 47x47 画像です。
過去にいくつかの CNN を使用したことがありますが、今回の入力次元は素数 (47 ピクセル) です。MaxPooling2Dこれは、特にモデルを使用している場合に、実装に問題を引き起こしていると思いますUpSampling2D。max pooling してから up sampling すると、いくつかの次元が失われることに気付きました。
を使用すると、入力を aおよび MaxPooling にカーネルmodel.summary()で渡した後(つまり、24 個のフィルターと形状の半分) の出力形状が得られることがわかります。(47,47,3)Conv2D(24)(2,2)(24, 24, 24)
ここで、カーネルを使用して UpSampling (2,2)(形状を 2 倍にする) し、再度畳み込むことによってそれを逆にしようとすると、(48,48,3)整形された出力が得られます。これは、必要以上に 1 行と 1 列余分です。
これに対して、「問題ありません。アップサンプリング時に目的の 47 ピクセルが得られるカーネル サイズを選択してください」と考えましたが、47 が素数であることを考えると、それを実行できるカーネル サイズはないように思えます。
入力次元を非素数に変更することを伴わないこの問題を回避する方法はありますか? たぶん、私のアプローチに何かが欠けているか、Keras には無視できる機能があり、ここで役立つ可能性があります。