[英]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.僅在訓練和測試期間嘗試提供標准化或縮放的圖像。
即使您嘗試使用密集層,我還是建議僅在最后一層(對於最后的number_of_classes層)使用密集層。 更好的架構是
[轉換后緊接着幾個過渡塊和瓶頸層] x 2扁平化密集度(number_of_classes)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.