0

CNN モデルに転移学習を適用しようとしていますが、以下のエラーが発生します。

model = model1(weights = "model1_weights", include_top=False)

—-

TypeError: __call__() takes exactly 2 arguments (1 given)

ありがとう

4

1 に答える 1

14

カスタム モデルを使用して転移学習を使用しようとしている場合、答えはモデル アーキテクチャ (説明) と重みを保存した方法によって異なります。

1. モデルの説明と重みを単一の .h5 ファイルに保存した場合。

keras の load_model メソッドを使用して、モデルを簡単にロードできます。

from keras.models import load_model
model = load_model("model_path.h5")

2. モデルの説明と重みを別のファイルに保存した場合 (たとえば、それぞれ json ファイルと .h5 ファイル)。

最初に json ファイルからモデルの説明をロードしてから、モデルの重みをロードできます。

form keras.models import model_from_json
with open("path_to_json_file.json") as json_file:
    model = model_from_json(json_file.read())
    model.load_weights("path_to_weights_file.h5")

古いモデルがロードされた後、破棄するレイヤー (通常、これらのレイヤーは完全に接続された最上位レイヤー) とフリーズするレイヤーを決定できます。モデルの最初の 5 つのレイヤーを再度トレーニングせずに使用し、次の 3 つを再度トレーニングし、最後のレイヤーを破棄するとします (ここでは、ネットワーク レイヤーの数が 8 より大きいと仮定しています)。最後の層の後に 3 つの全結合層を追加します。これは次のように行うことができます。

最初の 5 つのレイヤーをフリーズする

for i in range(5):
    model.layers[i].trainable = False

次の 3 つのレイヤーをトレーニング可能にします。すべてのレイヤーがトレーニング可能な場合、これは無視できます。

for i in range(5,8):
    model.layers[i].trainable = True

さらに3つのレイヤーを追加

ll = model.layers[8].output
ll = Dense(32)(ll)
ll = Dense(64)(ll)
ll = Dense(num_classes,activation="softmax")(ll)

new_model = Model(inputs=model.input,outputs=ll)
于 2018-07-14T09:54:30.643 に答える