我正在嘗試使用 Keras ResNet50 實現來訓練二進制圖像分類模型。我想在不使用遷移學習的情況下測試模型,但是當我嘗試使用帶有 sigmoid 激活的簡單密集層進行二元分類來更改輸出層時,我得到了有關形狀大小的錯誤。我的代碼是這樣的:baseModel= ResNet50(weights=None, include_top=False, classes=2, pooling=max)
output = baseModel.output
output = layers.Dense(1, activation='sigmoid')(output)
model = keras.models.Model(inputs=baseModel.input, outputs=output)
model.compile(optimizer=Adam(learning_rate=0.0001), loss='binary_crossentropy', metrics=['accuracy'])這樣做我得到了這個錯誤:ValueError: logits and labels must have the same shape ((None, 7, 7, 1) vs (None, 1))如果我在致密層之前添加一個扁平層,我會得到:ValueError: The last dimension of the inputs to `Dense` should be defined. Found `None`.我在這里缺少什么?我如何改變密集層的輸入形狀?
1 回答

拉莫斯之舞
TA貢獻1820條經驗 獲得超10個贊
對于 ResNet,您指定了 Top=False 和 pooling = 'max',因此 Resent 模型已向模型添加了最終的最大池化層。因此,使用下面的代碼:您不需要添加展平層,最大池化會為您展平輸出。
out=basemodel.layers[-1].output output = layers.Dense(1, activation='sigmoid')(out)
您可以使用 model.summary() 查看模型結構。另外你不應該使用classes=2。當 top 為 false 時,不應指定類。
添加回答
舉報
0/150
提交
取消