ValueError: имя «density_1» используется в модели 2 раза. Все имена слоев должны быть уникальными - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь выполнить Transfer Learning, но обнаружил эту ошибку и не могу ее исправить.Кто-нибудь может мне помочь, пожалуйста?

import numpy as np
import os
import keras
import matplotlib.pyplot as plt
from keras.layers import Dense
from keras.models import load_model, Model
from keras import backend as K
from keras.datasets import mnist
from keras.utils import np_utils

Modelo = load_model('Mono64_9.h5')

x=Modelo.output
x=Dense(512, activation='relu')(x)
x=Dense(256, activation='relu')(x)
x=Dense(128, activation='relu')(x)
preds=Dense(3,activation='softmax')(x)

model=Model(inputs=Modelo.input,outputs=preds)

ValueError: Имя «density_1» используется в модели 2 раза.Все имена слоев должны быть уникальными.

Ответы [ 2 ]

0 голосов
/ 05 июня 2019

Весьма вероятно, что модель Mono64_9.h5 имеет слой с именем dense_1 только потому, что это первое автоматически генерируемое имя для плотных слоев. Вы можете явно дать имена вашим новым слоям, чтобы они не конфликтовали с исходной моделью, например:

x=Dense(512, activation='relu', name='dense_10')(x)
x=Dense(256, activation='relu', name='dense_11')(x)
x=Dense(128, activation='relu', name='dense_12')(x)
preds=Dense(3,activation='softmax', name='dense_out')(x)

Вы можете присвоить слоям любое имя, они могут быть произвольными, и пользователь может просто ссылаться на слои по имени.

0 голосов
/ 05 июня 2019

Наиболее вероятно, что ваша загруженная модель уже имеет Плотные слои, имена которых называются с использованием общих значений по умолчанию для Плотных слоев при их создании (т. Е. dense_1, dense_2 и т. Д.).Я не уверен в том, что вы пытаетесь сделать в своей задаче по обучению переносу - добавляете ли вы больше плотных слоев в свою сеть или хотите удалить плотные слои и добавлять новые.

ЛибоКстати, чтобы запустить эту конкретную версию вашего кода, вам нужно добавить дополнительный атрибут name для уникального именования новых слоев.

Примерно так может работать:

import numpy as np
import os
import keras
import matplotlib.pyplot as plt
from keras.layers import Dense
from keras.models import load_model, Model
from keras import backend as K
from keras.datasets import mnist
from keras.utils import np_utils

Modelo = load_model('Mono64_9.h5')

x=Modelo.output
x=Dense(512, activation='relu', name="dense_a")(x) # New
x=Dense(256, activation='relu', name="dense_b")(x) # New
x=Dense(128, activation='relu', name="dense_c")(x) # New
preds=Dense(3,activation='softmax', name="dense_output")(x) # New

model=Model(inputs=Modelo.input,outputs=preds)
...