【问题标题】:Concatenate two layers连接两层
【发布时间】:2019-12-31 02:00:52
【问题描述】:

我在尝试连接两个层的结果时遇到错误消息。

def cnn_model_fn(learning_rate):
    """Model function for CNN."""
    model1=Sequential()

      # Convolutional Layer #1
    model1.add(tf.keras.layers.Conv2D(
          filters=20,
          kernel_size=[10, 1],
          kernel_initializer='he_uniform',
          bias_initializer=keras.initializers.Constant(value=0),
          padding="same",
          activation=tf.nn.relu, input_shape=(410,1,3)))
    model1.add(Flatten())

    model2=Sequential()

    model2.add(tf.keras.layers.Conv2D(
          filters=20,
          kernel_size=[10, 1],
          kernel_initializer='he_uniform',
          bias_initializer=keras.initializers.Constant(value=0),
          padding="same",
          activation=tf.nn.relu, input_shape=(410,1,3)))
    model2.add(Flatten())

    model4=Sequential()
    model4.add(keras.layers.Concatenate(axis=-1)([model1, model2]))

    optimizer = tf.train.AdamOptimizer(learning_rate)
    model4.compile(loss='mean_squared_error',
                optimizer=optimizer,
                metrics=['mean_absolute_error', 'mean_squared_error'])

    return model4

model4=cnn_model_fn(0.1) 
model4.summary()

"/usr/local/lib/python3.6/site-packages/tensorflow/python/keras/layers/merge.py 在构建(自我,输入形状) 377 # 纯粹用于形状验证。 378 如果不是 isinstance(input_shape, list) 或 len(input_shape) 379 raise ValueError('A Concatenate 层应该被调用' 380 '在至少 2 个输入的列表中') 381 if all([shape is None for shape in input_shape]):

ValueError: A Concatenate 层应该在列表中调用 at 至少 2 个输入"

【问题讨论】:

  • 将此行 model4.add(keras.layers.Concatenate(axis=-1)([model1, model2])) 更改为 model4.add(keras.layers.concatenate(axis=-1) ([model1.output, model2.output]))
  • 谢谢。它引发了另一个错误:“TypeError:添加的层必须是类 Layer 的实例。找到:Tensor("concatenate_20/concat:0", shape=(?, 16400), dtype=float32)"

标签: python tensorflow keras concatenation conv-neural-network


【解决方案1】:

您正在尝试连接 2 个模型,但您想要连接 2 个层。试试下面的代码。

from tensorflow.keras.models import Sequential, Model
from tensorflow.keras.layers import Flatten, Input

def cnn_model_fn(learning_rate):
    """Model function for CNN."""
    input_layer=Input(shape=(410,1,3))

    x1 = (tf.keras.layers.Conv2D(
          filters=20,
          kernel_size=[10, 1],
          kernel_initializer='he_uniform',
          bias_initializer=keras.initializers.Constant(value=0),
          padding="same",
          activation=tf.nn.relu ))(input_layer)
    x1 = Flatten()(x1)

    x2 = (tf.keras.layers.Conv2D(
          filters=20,
          kernel_size=[10, 1],
          kernel_initializer='he_uniform',
          bias_initializer=keras.initializers.Constant(value=0),
          padding="same",
          activation=tf.nn.relu))(input_layer)
    x2 = Flatten()(x2)

    x = (keras.layers.Concatenate(axis=-1)([x1,x2]))

    model = Model(input_layer, x)
    optimizer = tf.train.AdamOptimizer(learning_rate)
    model.compile(loss='mean_squared_error',
                optimizer=optimizer,
                metrics=['mean_absolute_error', 'mean_squared_error'])

    return model

【讨论】:

  • 谢谢。很有帮助。
猜你喜欢
  • 2021-10-28
  • 2017-08-29
  • 2021-12-14
  • 2017-12-14
  • 1970-01-01
  • 2022-06-11
  • 1970-01-01
  • 2019-03-30
  • 1970-01-01
相关资源
最近更新 更多