我正在尝试复制 cnn 并合并它们,以便获得双路径架构。但是出现错误。我使用的是keras 2.1.6版本
I am trying to duplicate cnn and merge them, so that I get a dual path architecture. But getting error. I am using keras 2.1.6 version
需要有关 python 的帮助 coding.I 尝试连接 2 个 CNN 模型。模型 #1 有 3 个卷积层,后面跟着一个致密层。 model2 也有相同的架构。我正在尝试连接这些 CNN 的输出并拥有另一个密集层。我包含代码供您参考。
model1 = Sequential()
# Conv Layer 1
model1.add(layers.SeparableConv2D(32, (9, 9), activation='relu', input_shape=input_shape))
model1.add(layers.MaxPooling2D(2, 2))
# model.add(layers.Dropout(0.25))
# Conv Layer 2
model1.add(layers.SeparableConv2D(64, (9, 9), activation='relu'))
model1.add(layers.MaxPooling2D(2, 2))
# model.add(layers.Dropout(0.25))
# Conv Layer 3
model1.add(layers.SeparableConv2D(128, (9, 9), activation='relu'))
model1.add(layers.MaxPooling2D(2, 2))
# model.add(layers.Dropout(0.25))
# model.add(layers.SeparableConv2D(256, (9, 9), activation='relu'))
# model.add(layers.MaxPooling2D(2, 2))
# Flatten the data for upcoming dense layer
model1.add(layers.Flatten())
model1.add(layers.Dropout(0.5))
model1.add(layers.Dense(512, activation='relu'))
#model1.add(layers.Dense(output_classes,) activation='relu'))
#model1.build(input_shape = (input_shape)
model2 = Sequential()
# Conv Layer 1
model2.add(layers.SeparableConv2D(32, (9, 9), activation='relu', input_shape=input_shape))
model2.add(layers.MaxPooling2D(2, 2))
# model.add(layers.Dropout(0.25))
# Conv Layer 2
model2.add(layers.SeparableConv2D(64, (9, 9), activation='relu'))
model2.add(layers.MaxPooling2D(2, 2))
# model.add(layers.Dropout(0.25))
# Conv Layer 3
model2.add(layers.SeparableConv2D(128, (9, 9), activation='relu'))
model2.add(layers.MaxPooling2D(2, 2))
# model.add(layers.Dropout(0.25))
# model.add(layers.SeparableConv2D(256, (9, 9), activation='relu'))
# model.add(layers.MaxPooling2D(2, 2))
# Flatten the data for upcoming dense layer
model2.add(layers.Flatten())
model2.add(layers.Dropout(0.5))
model2.add(layers.Dense(512, activation='relu'))
#model2.add(layers.Dense(output_classes, activation='relu'))
comb_model = Sequential()
x1=model1.output
x2=model2.output
comb_model.layers.Concatenate([x1,x2],axis=-1)
comb_model.add(layers.Dense(512, activation='relu'))
comb_model.add(layers.Dropout(0.6))
comb_model.add(layers.Dense(output_classes, activation=tf.nn.softmax))
print(comb_model.summary())
显示的错误是
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-28-267f93f5102f> in <module>()
3 x1=model1.output
4 x2=model2.output
----> 5 comb_model.layers.Concatenate([x1,x2],axis=-1)
6 comb_model.add(layers.Dense(512, activation='relu'))
7 comb_model.add(layers.Dropout(0.6))
AttributeError: 'list' object has no attribute 'Concatenate'
你能像这样创建你的组合模型吗?
x1=model1.output
x2=model2.output
concat = layers.Concatenate()([x1,x2])
dense1 = layers.Dense(512, activation='relu')(concat)
dropout = layers.Dropout(0.6)(dens1)
dense2 = layers.Dense(output_classes, activation=tf.nn.softmax)(dropout)
comb_model = tf.keras.Model(inputs=[model1.input, model2.input], outputs=dense2)
希望这有效。
需要有关 python 的帮助 coding.I 尝试连接 2 个 CNN 模型。模型 #1 有 3 个卷积层,后面跟着一个致密层。 model2 也有相同的架构。我正在尝试连接这些 CNN 的输出并拥有另一个密集层。我包含代码供您参考。
model1 = Sequential()
# Conv Layer 1
model1.add(layers.SeparableConv2D(32, (9, 9), activation='relu', input_shape=input_shape))
model1.add(layers.MaxPooling2D(2, 2))
# model.add(layers.Dropout(0.25))
# Conv Layer 2
model1.add(layers.SeparableConv2D(64, (9, 9), activation='relu'))
model1.add(layers.MaxPooling2D(2, 2))
# model.add(layers.Dropout(0.25))
# Conv Layer 3
model1.add(layers.SeparableConv2D(128, (9, 9), activation='relu'))
model1.add(layers.MaxPooling2D(2, 2))
# model.add(layers.Dropout(0.25))
# model.add(layers.SeparableConv2D(256, (9, 9), activation='relu'))
# model.add(layers.MaxPooling2D(2, 2))
# Flatten the data for upcoming dense layer
model1.add(layers.Flatten())
model1.add(layers.Dropout(0.5))
model1.add(layers.Dense(512, activation='relu'))
#model1.add(layers.Dense(output_classes,) activation='relu'))
#model1.build(input_shape = (input_shape)
model2 = Sequential()
# Conv Layer 1
model2.add(layers.SeparableConv2D(32, (9, 9), activation='relu', input_shape=input_shape))
model2.add(layers.MaxPooling2D(2, 2))
# model.add(layers.Dropout(0.25))
# Conv Layer 2
model2.add(layers.SeparableConv2D(64, (9, 9), activation='relu'))
model2.add(layers.MaxPooling2D(2, 2))
# model.add(layers.Dropout(0.25))
# Conv Layer 3
model2.add(layers.SeparableConv2D(128, (9, 9), activation='relu'))
model2.add(layers.MaxPooling2D(2, 2))
# model.add(layers.Dropout(0.25))
# model.add(layers.SeparableConv2D(256, (9, 9), activation='relu'))
# model.add(layers.MaxPooling2D(2, 2))
# Flatten the data for upcoming dense layer
model2.add(layers.Flatten())
model2.add(layers.Dropout(0.5))
model2.add(layers.Dense(512, activation='relu'))
#model2.add(layers.Dense(output_classes, activation='relu'))
comb_model = Sequential()
x1=model1.output
x2=model2.output
comb_model.layers.Concatenate([x1,x2],axis=-1)
comb_model.add(layers.Dense(512, activation='relu'))
comb_model.add(layers.Dropout(0.6))
comb_model.add(layers.Dense(output_classes, activation=tf.nn.softmax))
print(comb_model.summary())
显示的错误是
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-28-267f93f5102f> in <module>()
3 x1=model1.output
4 x2=model2.output
----> 5 comb_model.layers.Concatenate([x1,x2],axis=-1)
6 comb_model.add(layers.Dense(512, activation='relu'))
7 comb_model.add(layers.Dropout(0.6))
AttributeError: 'list' object has no attribute 'Concatenate'
你能像这样创建你的组合模型吗?
x1=model1.output
x2=model2.output
concat = layers.Concatenate()([x1,x2])
dense1 = layers.Dense(512, activation='relu')(concat)
dropout = layers.Dropout(0.6)(dens1)
dense2 = layers.Dense(output_classes, activation=tf.nn.softmax)(dropout)
comb_model = tf.keras.Model(inputs=[model1.input, model2.input], outputs=dense2)
希望这有效。