我正在尝试使用这个笔记本,其中我们定义了一个基于DenseNet201的三头模型。基于AlexNet的方法工作正常,但是DenseNet201抛出了一个错误。我是一个Pytorch用户,还没有发现ValueError: Missing data for input "input_5". You passed a data dictionary with keys ['img_input']. Expected the following keys: ['input_5']的错误。我知道在下面的代码片段中,我应该有一个名为'img_input'的名称,但我无法理解它。
class base_model():
def __init__(self, side_dim, n_bb, n_classes, name_model):
self.side_dim = side_dim
self.name_model = name_model
# base model DenseNet
if name_model == 'DenseNet201':
self.base_model = keras.applications.DenseNet201(
include_top=False,
input_shape=(self.side_dim, self.side_dim, 3),
)
self.image_input = self.base_model.input
self.flatten = keras.layers.Flatten()(self.base_model.layers[-2].output)
self.BatcNorm = keras.layers.BatchNormalization()(self.flatten)
print('Base model: DenseNet121 (7.2M params x 201 layers')
# ----------------------------------------------------------------------
# Add head with three different outputs to last layer of the basic model
# ----------------------------------------------------------------------
# class output
self.class_categorical = keras.layers.Dense((n_bb * n_classes),
activation='softmax')(self.BatcNorm)
self.class_output = keras.layers.Reshape((n_bb, n_classes),
name='class_output')(self.class_categorical)
# confidence output
self.score_confidence = keras.layers.Dense((n_bb),
name='score_confidence',
activation='tanh')(self.BatcNorm)
# bounding boxes coordinate output
self.score_coords = keras.layers.Dense((n_bb * 4),
name='score_coords')(self.BatcNorm)当我运行以下操作时,会引发错误:
# let's start our training
train_history = myModel.fit({'img_input': X_train},
{'class_output': class_target,
'score_confidence': target_confidence,
'score_coords': target_coords},
epochs=N_ep,
validation_data=({'img_input': X_val},
{'class_output': Val_class,
'score_confidence': Val_confidence,
'score_coords': Val_coords}),
batch_size=Batchs,
initial_epoch = init_ep,
verbose=1,
callbacks=[callbacks,
tensorboard_callback])在基于AlexNet的网络中,输入名称是直接更改的,但我不知道如何对DenseNet201进行更改。
你能帮帮我吗?
发布于 2022-11-22 08:25:55
问题是您的输入节点与保存输入的字典键没有相同的名称。
您可以先用正确的名称创建输入层,然后将其作为输入张量传递给DenseNet201函数。
self.image_input = keras.Input((self.side_dim, self.side_dim, 3), name="img_input")
self.base_model = keras.applications.DenseNet201(
include_top=False,
input_tensor=self.image_input,
)另一个选项是使用输入节点的名称在您的字典中获得输入的名称:
myModel.fit({myModel.input.name: X_train},
{'class_output': class_target,
'score_confidence': target_confidence,
'score_coords': target_coords})最后一个选项是跳过在一起使用字典,因为您只有一个输入:
myModel.fit(X_train,
{'class_output': class_target,
'score_confidence': target_confidence,
'score_coords': target_coords})https://stackoverflow.com/questions/74527844
复制相似问题