簡體   English   中英

Output 使用 keras ResNet50 model 進行二進制分類的層

[英]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.

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