无法将图层添加到已保存的Keras模型中。 “模型”对象没有属性“添加”

时间:2017-08-18 10:57:41

标签: python deep-learning keras keras-layer

我使用model.save()保存了一个模型。我正在尝试重新加载模型并添加几个图层并调整一些超参数,但是,它会抛出AttributeError。

使用load_model()加载模型。

我想我不知道如何将图层添加到已保存的图层。如果有人可以在这里指导我,那将会很棒。我是深度学习和使用keras的新手,所以我的请求可能是愚蠢的。

段:

prev_model = load_model('final_model.h5') # loading the previously saved model.

prev_model.add(Dense(256,activation='relu'))
prev_model.add(Dropout(0.5))
prev_model.add(Dense(1,activation='sigmoid'))

model = Model(inputs=prev_model.input, outputs=prev_model(prev_model.output))

它抛出的错误:

Traceback (most recent call last):
  File "image_classifier_3.py", line 39, in <module>
    prev_model.add(Dense(256,activation='relu'))
AttributeError: 'Model' object has no attribute 'add'

我知道添加图层适用于新的Sequential()模型,但我们如何添加到现有的已保存模型?

2 个答案:

答案 0 :(得分:6)

这是因为加载的模型是函数类型而不是Sequential模型。因此,您必须使用此处所述的功能API:(https://keras.io/getting-started/functional-api-guide/)。

在一天结束时,正确的功能是这样的:

fc = Dense(256,activation='relu')(prev_model)
drop = Dropout(0.5)(fc)
fc2 = Dense(1,activation='sigmoid')(drop)

model = Model(inputs=prev_model.input, outputs=fc2)

答案 1 :(得分:5)

add方法仅存在于sequential modelsSequential class)中,这是更强大但更复杂的functional modelModel class)的简单界面。 load_model将始终返回Model实例,这是最通用的类​​。

您可以查看示例以了解如何编写不同的模型,但最终,Model的行为与任何其他图层非常相似。所以你应该能够做到:

prev_model = load_model('final_model.h5') # loading the previously saved model.

new_model = Sequential()
new_model.add(prev_model)
new_model.add(Dense(256,activation='relu'))
new_model.add(Dropout(0.5))
new_model.add(Dense(1,activation='sigmoid'))

new_model.compile(...)