首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Keras的DenseNet201多头模型

基于Keras的DenseNet201多头模型
EN

Stack Overflow用户
提问于 2022-11-22 05:24:15
回答 1查看 22关注 0票数 0

我正在尝试使用这个笔记本,其中我们定义了一个基于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'的名称,但我无法理解它。

代码语言:javascript
复制
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)

当我运行以下操作时,会引发错误:

代码语言:javascript
复制
# 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进行更改。

你能帮帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-22 08:25:55

问题是您的输入节点与保存输入的字典键没有相同的名称。

您可以先用正确的名称创建输入层,然后将其作为输入张量传递给DenseNet201函数。

代码语言:javascript
复制
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,
                          )

另一个选项是使用输入节点的名称在您的字典中获得输入的名称:

代码语言:javascript
复制
myModel.fit({myModel.input.name: X_train}, 
            {'class_output': class_target, 
            'score_confidence': target_confidence, 
            'score_coords': target_coords})

最后一个选项是跳过在一起使用字典,因为您只有一个输入:

代码语言:javascript
复制
myModel.fit(X_train, 
            {'class_output': class_target, 
            'score_confidence': target_confidence, 
            'score_coords': target_coords})
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74527844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档