我想使用keras.applications.resnet50使用以下设置来训练Resnet解决两类问题:



from keras.layers import Dropout, Flatten, Dense
from keras.applications.resnet50 import ResNet50
from keras.models import Model

resNet = ResNet50(include_top=False, weights=None)
y = resNet.output
y = Flatten()(y)
y = Dense(2, activation='softmax')(y)
model = Model(inputs=resNet.input, outputs=y)
opt = keras.optimizers.Adam()
model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])
epochs = 15
model.fit(train_tensors, train_targets,
          validation_data=(valid_tensors, valid_targets),
          epochs=epochs, batch_size=10, callbacks=[checkpointer], verbose=1)


运行代码会引发错误

Exception: The shape of the input to "Flatten" is not fully defined


因此,输出层的输入张量一定存在问题,在我的情况下,这是一个热编码的矢量,即大小为2的一维数组。我在做什么错?

最佳答案

你得到


  例外:“平面”输入的形状未完全定义


因为您尚未在Resnet网络中设置输入形状。尝试:



resNet = ResNet50(include_top=False, weights=None, input_shape=(224, 224, 3))


另外,由于您在输出层中使用具有Sigmoid激活功能的binary_crossentropy,因此应仅使用1个神经元而不是2个神经元,如下所示:

y = Dense(1, activation='sigmoid')(y)

关于python - 异常培训Resnet50:““Flatten”输入的形状未完全定义”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50693322/

10-11 15:20