【问题标题】:Multi stream CNN using pretrained VGG使用预训练 VGG 的多流 CNN
【发布时间】:2020-10-13 17:17:37
【问题描述】:

我想使用带有预训练 VGG19 的多流 CNN。 我的代码出现错误。请帮我找出正确的代码。

这是我的代码 sn-p

   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.

【问题讨论】:

    标签: tensorflow keras deep-learning conv-neural-network vgg-net


    【解决方案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'])
    

    【讨论】:

    • 我收到以下错误:“InputLayer”对象没有属性“_name”
    • 我没有这个错误colab.research.google.com/drive/… 它可能取决于你的 tf 版本。尝试使用 layer.name 并且不要忘记投票并接受它作为答案;-)
    猜你喜欢
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 2016-11-05
    • 2019-09-23
    • 2023-04-03
    • 2016-03-14
    • 1970-01-01
    相关资源
    最近更新 更多