簡體   English   中英

我的Keras CNN返回相同的輸出值,我該如何修復/改善我的代碼

[英]My Keras CNN return the same output value, how can I fix/improve my code

我創建了一個代碼來訓練我的CNN,它將確定圖像是一個類別還是另一個類別(“ pdr或nonPdr”)

這是我的keras模型:

model = Sequential()
model.add(Conv2D(input_shape=(605,700,3), filters=64, kernel_size=(3,3), padding="same",activation="tanh"))
model.add(MaxPooling2D((2, 2)))
model.add(Flatten())
model.add(Dense(32, activation='tanh', input_dim=100))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])

data, labels = ReadImages(TRAIN_DIR)

model.fit(np.array(data), np.array(labels), epochs=10, batch_size=16)

model.save('model.h5')

這是我的test_predict文件:

model = load_model('model.h5')

model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])

test_image = cv2.imread("test_data/im0203.ppm") 
test_image = test_image.reshape(1,605,700,3).astype('float')
test_image = np.array(test_image)

test_image2 = cv2.imread("test_data/im0001.ppm") 
test_image2 = test_image2.reshape(1,605,700,3).astype('float')

#predict the result
print(model.predict(test_image))
print(model.predict(test_image2))

運行下面的代碼后,我的2張圖像得到相同的值(不同的是,一個是pdr,另一個是nonPdr)

[[0.033681]]
[[0.033681]]

如何解決並改善CNN。 我感謝您的幫助。

更新我嘗試刪除一個密集層並更改(2,activation ='sigmoid')中的最后一個,但是它也無法正常工作。.我真的沒有任何想法可以做**

這可能是由於多種原因。 最合理的是:

  1. 饋入網絡的輸入和預測過程中饋入的圖像可能沒有相同的預處理步驟。

  2. 該模型過擬合,並且當發現稍微不同的預測圖像時,它傾向於根據其訓練來偏離其決策。

  3. 型號不好

為避免此類並發症,將來可能的解決方案可能是:1.僅在訓練和測試期間嘗試提供標准化或縮放的圖像。

  1. 不要使用太多的密集層(特別是用於圖像分類),因為密集層擅長學習空間信息,並且要使圖像正確分類,模型需要以2d矩陣而不是1d空間矩陣查看圖像(因為密集層變平了) 2d矩陣到1d矩陣)。

即使您嘗試使用密集層,我還是建議僅在最后一層(對於最后的number_of_classes層)使用密集層。 更好的架構是

[轉換后緊接着幾個過渡塊和瓶頸層] x 2扁平化密集度(number_of_classes)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM