model.save()
を使用してモデルを保存しました。モデルをリロードしていくつかのレイヤーを追加し、いくつかのハイパーパラメーターを調整しようとしていますが、AttributeErrorがスローされます。
モデルは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'
新しいSequential()モデルでレイヤーの追加が機能することはわかっていますが、既存の保存済みモデルにどのように追加しますか?
add
メソッドは シーケンシャルモデル ( Sequential
class )にのみ存在します。これは、より強力ですが複雑なシンプルなインターフェイスです- 機能モデル ( 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(...)
これは、読み込まれたモデルがシーケンシャルモデルではなく関数型であることによるものです。したがって、ここで説明するように、機能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)