[英]Output layer for binary classification using keras ResNet50 model
我正在嘗試使用 Keras ResNet50 實現來訓練二值圖像分類 model。
我想在不使用遷移學習的情況下測試 model,但是當我嘗試使用一個簡單的密集層更改 output 層並為二進制分類激活 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`.
我在這里缺少什么? 我如何更改致密層的輸入形狀?
對於 ResNet,您指定了 Top=False 和 pooling = 'max',因此 Resent model 已將最終的最大池化層添加到 model。因此請使用以下代碼:您不需要添加展平層,最大池化將 output 展平為你。
out=basemodel.layers[-1].output
output = layers.Dense(1, activation='sigmoid')(out)
您可以使用 model.summary() 查看 model 結構。 你也不應該使用 classes=2。 當 top 為 false 時,不應指定類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.