我很想獲得關於以下挑戰的見解和觀點。我試圖訓練一個CNN來對具有不同「顏色塊」的圖像進行分類(請參見下面的示例)。圖像是二維數組(例如20乘100像素),其中白色編碼爲0,藍色編碼爲1,綠色編碼爲2.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或2)以及幾個圖層。這個問題很簡單,可以在沒有神經網絡的情況下解決。 –