2017-10-25 21 views
1

現在、Keras(オートエンコーダ)を使用してCNNモデルを開発中です。このタイプの入力は、形状が(47,47,3)、つまり3(RGB)層の47x47画像です。問題トレーニング素数入力のCNN番号

私はこれまでいくつかのCNNと仕事をしていましたが、今回は入力サイズが素数(47ピクセル)です。これは私の実装で、特にMaxPooling2DUpSampling2Dを使用しているときに問題が発生していると思います。 max poolingとup samplingのあとでとなったときに、いくつかの次元が失われていました。

私は私が(24, 24, 24)の出力形状を得る(2,2)カーネルでConv2D(24)とMaxPoolingを通じて私(47,47,3)入力を通過した後(つまり、24個のフィルタで、半分の形状)ことがわかりますmodel.summary()を使用します。私は(2,2)カーネル(ダブル形)と畳み込むにアップサンプリングすることにより、その逆をしようとすると今

は、再び私は(48,48,3)形の出力を取得します。これは、必要以上に1行と1列です。

「いいえ問題はありません。ちょうどいいえ、サンプリングするときに希望の47ピクセルを与えるカーネルサイズを選択しました」ですが、47が素数であるとすれば、それはカーネルサイズそれを行うことができます。

入力ディメンションを非プライムに変更することを含まないこの問題を回避する方法はありますか?多分私は私のアプローチで何かを見逃しているかもしれません。あるいは、おそらくKerasは私がここで助けてくれるいくつかの機能を無視しています。

答えて

2

ZeroPadding2DCropping2Dを使用するように助言します。 0でイメージを非対称にパディングし、イメージのサイズを変更せずにイメージの均一なサイズを取得できます。これはアップサンプリングの問題を解決するはずです。さらに、すべての畳み込みレイヤーにpadding=sameを設定することを忘れないでください。

EDIT:

ただ、あなたのような操作を実行する方法の例戦略与えるために:ネットワークの大きさをプールする前に、奇数の場合

  1. を - ゼロパッドそれもそれを作るために。
  2. 対応するアップサンプル操作後に、機能マップを元の奇妙なサイズに戻すためにクロッピングを使用します。
+0

あなたが見ているものを確認します:)ありがとう – DarkCygnus

+0

私はあなたが提案したものをチェックしていたので、各プーリングとサンプリングの前にそのモデルをモデルに含めるべきですか?私は、 'padding'パラメータは結果のサイズがプライムではないようにすべきでしょうか? – DarkCygnus

+0

答えを更新しました。あなたが理解できないことがあるかどうか教えてください。 –