我正在尝试使用 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
提交
取消