0
私はモデルを訓練して特定のディレクトリに保存しましたが、訓練は約81%のテスト精度を与えています。私は、次のコマンドを使用していますケラス逐次モデルは異なる結果を与えます
model = Sequential()
model.add(Embedding(max_features, 128, input_length=max_len))
model.add(SpatialDropout1D(0.3))
model.add(GaussianNoise(0.2))
model.add(LSTM(128 , dropout_W=0.3, dropout_U=0.3, return_sequences=False))
model.add(LSTM(56, dropout_W = 0.4, dropout_U=0.4))
model.add(Dense(1, W_regularizer=l2(0.2)))
model.add(Activation('sigmoid'))
model.summary()
adam = Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.00)
model.compile(loss='binary_crossentropy', optimizer=adam,metrics = ['accuracy'])
model_history = model.fit(x, y=y, batch_size=128, epochs=2, verbose=1,validation_split = 0.2)
model_json = model.to_json()
with open("C:/Users/twelve_user/Downloads/model3.json", "w") as json_file:
json_file.write(model_json)
model.save_weights("C:/Users/twelve_user/Downloads/weights_model3.h5")
print("Saved model to disk")
predictions = model.predict(testx)
しかし、時はいつでも、私は精度は76%すなわち落下、別のPythonスクリプトで同じモデルをロードしようとしています。訓練されていないモデルのようにランダムな精度が得られることがあります。ローディングに使用したコマンドは次のとおりです。
json_file = open('C:/Users/twelve_user/Downloads/model3.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
model = model_from_json(loaded_model_json)
model.load_weights("C:/Users/twelve_user/Downloads/weights_mode3.h5")
print("Loaded model from disk")
これはどのように可能ですか?訓練されたモデルとロードされたモデルの結果は同じでなければなりません。私はKerasにはかなり新しいので、どこが間違っているのか理解できません。
ありがとうございました!どんな助けもありがとう。
おかげ。私は2つのスクリプトファイルを持っています。最初のスクリプトには、モデル、レイヤー、コンパイル、トレーニング、予測の定義、モデルの保存(model.saveとmodel.save_weights)が含まれています。 2番目のスクリプトには、model.layers、compilation、model.save、delモデル、load_model、predictionの定義が含まれています。それでも私は両方のスクリプトファイルから異なる結果を得ています。 – user
model.saveでは、モデルはまったく同じです。 2回目の予測時に同じデータを使用していますか? –
ええ、両方のファイルの同じデータ。最初のファイルは、テストの正確さを知るために、訓練とテストを行うためのファイルです。時間がかかる場合は、同じデータでのみテストするために2番目のファイルを作成します。だから私は精度が両方のファイルで同じでなければならないと思う。データセット、モデル定義、レイヤー、すべてが同じであるためです。 – user