我正在尝试进行转学,但发现此错误,但无法解决。有人可以帮我吗?
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:名称“ dense_1”在模型中使用了2次。所有图层名称都应该是唯一的。
答案 0 :(得分:0)
最有可能发生的事情是,您加载的模型已经具有Dense层,这些层在构造它们时使用Dense层的通用默认名称进行命名(即dense_1
,dense_2
等)。我不确定您要在迁移学习任务中做什么—是要向网络中添加更多的Dense层,还是要删除Dense层并添加新层。
无论哪种方式,要运行此特定版本的代码,您都需要添加一个额外的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)
答案 1 :(得分:0)
模型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)
您可以给图层起任何名字,它们是任意的,仅用于用户按名称引用图层。