2017-08-18 13 views
3

model.save()を使ってモデルを保存しました。モデルをリロードしていくつかのレイヤーを追加し、いくつかのハイパーパラメータを調整しようとしていますが、AttributeErrorがスローされます。保存されたKerasモデルにレイヤーを追加できません。 'Model'オブジェクトには 'add'という属性はありません

load_model()を使用してモデルを読み込みます。

私は、保存されたレイヤーにレイヤーを追加する方法を理解していないと思います。誰かがここで私を導くことができれば、それは素晴らしいことになるでしょう。私はケラスを深く学び、使用する初心者なので、おそらく私の要求はばかげているでしょう。

スニペット:

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' 

私は知っているが、新たなシーケンシャル()モデルで動作しますが、どのように我々は、既存の保存されたモデルに追加するには?

答えて

2

Model 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(...) 
2

これは、読み込まれたモデルがシーケンシャルモデルではなく機能型であるためです。したがって、ここに記載されているように機能的APIを使用する必要があります:(https://keras.io/getting-started/functional-api-guide/)。

一日の終わりに正しい関数は次のようなものです:add方法は、(より強力ですが複雑functional modelにシンプルなインターフェースである、唯一のsequential modelsSequential class)に存在する

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) 
関連する問題