1

I want to use a multi-stream CNN with pre-trained VGG19. I'm getting an error with my code. Please help me out with the correct code.

Here's my code snippet

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

The error I get is:

ValueError: The name "block1_conv1" is used 2 times in the model. All layer names should be unique.
Emm
  • 71
  • 8

1 Answers1

2

you can solve simply changing the name of your layers

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'])
Marco Cerliani
  • 21,233
  • 3
  • 49
  • 54
  • I get the following error: 'InputLayer' object has no attribute '_name' – Emm Jun 23 '20 at 17:14
  • 1
    I don't have this error https://colab.research.google.com/drive/1EweW0YeRoJBMGSZ48HbVXSwe9rkXMLC9?usp=sharing it may depend on your tf version. try with layer.name and don't forget to upvote and accept it as answer ;-) – Marco Cerliani Jun 23 '20 at 17:19