我正在嘗試使用 Keras ResNet50 實(shí)現(xiàn)來(lái)訓(xùn)練二進(jìn)制圖像分類(lèi)模型。我想在不使用遷移學(xué)習(xí)的情況下測(cè)試模型,但是當(dāng)我嘗試使用帶有 sigmoid 激活的簡(jiǎn)單密集層進(jìn)行二元分類(lèi)來(lái)更改輸出層時(shí),我得到了有關(guān)形狀大小的錯(cuò)誤。我的代碼是這樣的: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'])這樣做我得到了這個(gè)錯(cuò)誤:ValueError: logits and labels must have the same shape ((None, 7, 7, 1) vs (None, 1))如果我在致密層之前添加一個(gè)扁平層,我會(huì)得到:ValueError: The last dimension of the inputs to `Dense` should be defined. Found `None`.我在這里缺少什么?我如何改變密集層的輸入形狀?
1 回答

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