使用预训练 VGG 的多流 CNN

Multi stream CNN using pretrained VGG

我想使用带有预训练 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.

您只需更改图层名称即可解决

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'])