我想使用带有预训练的VGG19的多流CNN。 我的代码出现错误。请帮我提供正确的代码。
这是我的代码段
ecg_cnn =VGG19(weights="imagenet", include_top=False, input_tensor=Input(shape=input_shape,name="ecg"))
for layer in ecg_cnn.layers:
layer.trainable = False
out1= ecg_cnn.output
ppg_cnn = VGG19(weights="imagenet", include_top=False, input_tensor=Input(shape=input_shape,name="ppg"))
for layer in ppg_cnn.layers:
layer.trainable = False
out2= ppg_cnn.output
con = Concatenate()([out1, out2])
out=Flatten()(con)
out=(Dense(4096))(out)
out=(Activation('tanh'))(out)
out=(Dropout(0.4))(out)
# Output Layer
out = Dense(3, activation='softmax')(out)
model = Model(inputs=[ecg_cnn.input, ppg_cnn.input], outputs=[out])
model.compile(loss='categorical_crossentropy',
optimizer='sgd',
metrics=['accuracy'])
我得到的错误是:
ValueError: The name "block1_conv1" is used 2 times in the model. All layer names should be unique.
答案 0 :(得分:1)
您可以解决只需更改图层名称
input_shape = (224,224,3)
ecg_cnn = VGG19(weights="imagenet", include_top=False,
input_tensor=Input(shape=input_shape,name="ecg"))
for layer in ecg_cnn.layers:
layer.trainable = False
layer._name = layer._name + '_vgg19_1' # <===========
out1 = ecg_cnn.output
ppg_cnn = VGG19(weights="imagenet", include_top=False,
input_tensor=Input(shape=input_shape,name="ppg"))
for layer in ppg_cnn.layers:
layer.trainable = False
layer._name = layer._name + '_vgg19_2' # <===========
out2= ppg_cnn.output
con = Concatenate()([out1, out2])
out=Flatten()(con)
out=(Dense(4096))(out)
out=(Activation('tanh'))(out)
out=(Dropout(0.4))(out)
# Output Layer
out = Dense(3, activation='softmax')(out)
model = Model(inputs=[ecg_cnn.input, ppg_cnn.input], outputs=[out])
model.compile(loss='categorical_crossentropy',
optimizer='sgd',
metrics=['accuracy'])