【问题标题】:Concatenating parallel layers in tensorflow在张量流中连接平行层
【发布时间】:2021-09-11 14:00:45
【问题描述】:

下面我将在 tensorflow 中实现神经网络 Neural network with paralle layers

我为它写了下面的代码

# Defining model input
input_ = Input(shape=(224, 224, 3))

# Defining first parallel layer
in_1 = Conv2D(filters=16, kernel_size=(3, 3), activation=relu)(input_)
conv_1 = BatchNormalization()(in_1)
conv_1 = AveragePooling2D(pool_size=(2, 2), strides=(3, 3))(conv_1)

# Defining second parallel layer
in_2 = Conv2D(filters=16, kernel_size=(5, 5), activation=relu)(input_)
conv_2 = BatchNormalization()(in_2)
conv_2 = AveragePooling2D(pool_size=(2, 2), strides=(3, 3))(conv_2)

# Defining third parallel layer
in_3 = Conv2D(filters=16, kernel_size=(5, 5), activation=relu)(input_)
conv_3 = BatchNormalization()(in_3)
conv_3 = MaxPooling2D(pool_size=(2, 2), strides=(3, 3))(conv_3)

# Defining fourth parallel layer
in_4 = Conv2D(filters=16, kernel_size=(9, 9), activation=relu)(input_)
conv_4 = BatchNormalization()(in_4)
conv_4 = MaxPooling2D(pool_size=(2, 2), strides=(3, 3))(conv_4)

# Concatenating layers
concat = Concatenate([conv_1, conv_2, conv_3, conv_4])
flat = Flatten()(concat)
out = Dense(units=4, activation=softmax)(flat)

model = Model(inputs=[in_1, in_2, in_3, in_4], outputs=[out])
model.summary()

运行代码后出现以下错误:

TypeError: Inputs to a layer should be tensors.
Got: <tensorflow.python.keras.layers.merge.Concatenate object at 0x7febd46f6ac0>

【问题讨论】:

  • 我认为您的语法有误。应该类似于concat = Concatenate()([conv_1, conv_2, conv_3, conv_4])
  • 顺便说一句,您要连接的 4 张图像的形状不同

标签: python tensorflow keras deep-learning neural-network


【解决方案1】:

您的代码中有各种错误,没有填充,错误的连接,错误的输入,并且激活是以不可重现的方式定义的,这有效:

from keras.layers.merge import concatenate # please share the import next time
from keras.layers import Conv2D, AveragePooling2D, MaxPooling2D, Flatten, Dense, Concatenate, Input
from keras import Model

# Defining model input
input_ = Input(shape=(224, 224, 3))

# Defining first parallel layer
in_1 = Conv2D(filters=16, kernel_size=(3, 3), activation='relu', padding='same')(input_)
conv_1 = BatchNormalization()(in_1)
conv_1 = AveragePooling2D(pool_size=(2, 2), strides=(3, 3))(conv_1)

# Defining second parallel layer
in_2 = Conv2D(filters=16, kernel_size=(5, 5), activation='relu', padding='same')(input_)
conv_2 = BatchNormalization()(in_2)
conv_2 = AveragePooling2D(pool_size=(2, 2), strides=(3, 3))(conv_2)

# Defining third parallel layer
in_3 = Conv2D(filters=16, kernel_size=(5, 5), activation='relu', padding='same')(input_)
conv_3 = BatchNormalization()(in_3)
conv_3 = MaxPooling2D(pool_size=(2, 2), strides=(3, 3))(conv_3)

# Defining fourth parallel layer
in_4 = Conv2D(filters=16, kernel_size=(9, 9), activation='relu', padding='same')(input_)
conv_4 = BatchNormalization()(in_4)
conv_4 = MaxPooling2D(pool_size=(2, 2), strides=(3, 3))(conv_4)

# Concatenating layers
concat = concatenate([conv_1, conv_2, conv_3, conv_4])
flat = Flatten()(concat)
out = Dense(units=4, activation='softmax')(flat)

model = Model(inputs=[input_], outputs=[out])
model.summary()

所以你要么这样做:

concat = Concatenate()([conv_1, conv_2, conv_3, conv_4])

或:

concat = concatenate([conv_1, conv_2, conv_3, conv_4])

【讨论】:

  • 你能复制和粘贴我的代码吗?我没有收到错误
  • 你是否替换了连接
  • @MiladSadeghi.DM
  • 你从 tensorflow.keras.layers.merge import concatenate 导入。这是正确的导入语句吗?
  • @MiladSadeghi.DM 或这样称呼它concat = Concatenate()([conv_1, conv_2, conv_3, conv_4])
猜你喜欢
  • 2018-04-11
  • 2019-05-19
  • 1970-01-01
  • 2021-05-17
  • 1970-01-01
  • 2022-06-20
  • 2019-04-09
  • 1970-01-01
  • 2017-12-05
相关资源
最近更新 更多