【问题标题】:Keras: Concatenating metadata into a CNNKeras:将元数据连接到 CNN
【发布时间】:2018-11-21 02:18:48
【问题描述】:

我有一个经过图像训练的 CNN。我还获得了面部的几何形状(68x2 - 68 个点,x,y 坐标)。我想在所有卷积层之后对几何进行编码,并在全连接层中使用它们。我正在使用 vggFace 模型。

'''
Load the model
'''
vgg_model = VGGFace(
    include_top=False,
    input_shape=(img_width, img_height, 3))


'''
Customize the model
'''
# Add geometry input
geo_input = Input(shape=(1,136,1))
geo_input = Flatten(name='flatten')(geo_input)


last_layer = vgg_model.get_layer('pool5').output
x = Flatten(name='flatten')(last_layer)
x = concatenate([x, geo_input], axis=1)
x = Dense(hidden_dim, activation='relu', name='fc6')(x)
x = Dense(hidden_dim, activation='relu', name='fc7')(x)
out = Dense(nb_class, activation='softmax', name='fc8')(x)

custom_vgg_model = Model(
    [vgg_model.input, geo_input], 
    out)

但我收到以下错误:

TypeError: Input layers to a `Model` must be `InputLayer` objects. Received inputs: [<tf.Tensor 'input_1:0' shape=(?, 224, 224, 3) dtype=float32>, <tf.Tensor 'flatten/Reshape:0' shape=(?, ?) dtype=float32>]. Input 1 (0-based) originates from layer type `Flatten`.

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

    这里:

    # Add geometry input
    geo_input = Input(shape=(1,136,1))
    geo_input = Flatten(name='flatten')(geo_input)
    

    在第二行中,geo_input 不再是输入。它是Flatten 层的输出。您将其传递给 Model 创建。所以需要保持正确的输入张量:

    geo_input_tensor = Input(shape=(1,136,1))
    geo_input = Flatten(name='flatten')(geo_input_tensor)
    
    .....
    ......
    
    custom_vgg_model = Model([vgg_model.input, geo_input_tensor], out)
    

    【讨论】:

      猜你喜欢
      • 2018-01-25
      • 1970-01-01
      • 2019-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-20
      • 2019-09-17
      • 1970-01-01
      相关资源
      最近更新 更多