Многопоточная CNN с использованием предварительно обученного VGG
Я хочу использовать многопотоковую CNN с предварительно обученным VGG19. Я получаю сообщение об ошибке в коде. Пожалуйста, помогите мне с правильным кодом.
Вот мой фрагмент кода
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.
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'])