私は次のチャレンジについて洞察と見方を得たいと思っています。私はCNNを訓練して、異なる色の別個の「ブロック」を持つ画像を分類しようとしています(下の例を参照してください)。画像は、白色が0、青色が1、緑色が2次元の2次元配列です(例:20×100ピクセル)。CNN:単純なブロックを認識するための挑戦
私は驚くべきことに、良いパフォーマンスでネットワークを鍛えるために苦労しています。これらのタイプの画像は、特に画像サイズが大きくなった場合(例:40×100)、オーバーフィットや、検証セットのパフォーマンスが非常に悪くなるのを防ぐためです。私は、これらのタイプの機能を認識するためにどのタイプのCNN構造が必要であるかを理解しようとしています。
私の現在のネットワーク構造は以下のとおりですが、この構造はパフォーマンスが混在する傾向があり、イメージサイズが大きくなると失敗するか非常に遅くなります。私は、正確な分類を行うために、ネットワークがシアンの「ブロック」を上から下に見なければならないと推測します。
私はこれを行うための最善のアプローチについて考えるのが好きです。ネットワークに複数のレイヤを追加するのが最善の方法ですか?またはより大きな畳み込み窓で作業しますか?コンバージョンを追加する各レイヤーにフィルター(例えば、64から96など)?私は基本的なレベルで何か間違っていると感じています。
非常に感謝しています。
model = Sequential()
model.add(Conv2D(64, (3, 3), input_shape=input_shape))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dropout(0.25))
model.add(Dense(1,activation="sigmoid"))
opt = keras.optimizers.rmsprop(lr=0.001, decay=1e-5)
model.compile(loss='binary_crossentropy',optimizer=opt,metrics=['accuracy'])
あなたの挑戦を正しく理解するだけで、あなたの結果はあなたのデータにエンコードされています(緑色のピクセル=陽性(1))。なぜあなたの画像の色が緑であるかを単に確認するのではなく、ニューラルネットワークを訓練したいのですか? – petezurich
最後の画像がマイナスになるのはなぜですか? –
問題が異なる色で1つのブロックを見つけるのと同じくらい簡単な場合は、おそらく1または2などの非常に少ないフィルタと少数のレイヤしか必要としないでしょう。この問題は、ニューラルネットワークなしで解くだけの単純さです。 –