バイナリ分類問題のためにLSTMをトレーニングしようとしています。練習後に曲線loss
をプロットすると、そこに奇妙なピックがあります。ここではいくつかの例は以下のとおりです。なぜここにケラスでLSTMをトレーニング中に奇妙な損失曲線
は、基本的なコードは
あるmodel = Sequential()
model.add(recurrent.LSTM(128, input_shape = (columnCount,1), return_sequences=True))
model.add(Dropout(0.5))
model.add(recurrent.LSTM(128, return_sequences=False))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
new_train = X_train[..., newaxis]
history = model.fit(new_train, y_train, nb_epoch=500, batch_size=100,
callbacks = [EarlyStopping(monitor='val_loss', min_delta=0.0001, patience=2, verbose=0, mode='auto'),
ModelCheckpoint(filepath="model.h5", verbose=0, save_best_only=True)],
validation_split=0.1)
# list all data in history
print(history.history.keys())
# summarize history for loss
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()
私はピックが発生していることを理解していませんか?何か案は?このような何かが起こる理由
お返事ありがとうございます。私はそれらを試し、結果についてあなたに知らせるでしょう。 – nabroyan
素晴らしいヒント、@nabroyanはいほとんどの場合、これは大きすぎるバッチに起因する可能性があります。また、別のオプティマイザを試してみると、rmspropとadadeltaがチューニングされた学習率で良い選択肢になることがあります。非常に小さな学習率でSGDにまっすぐに落とすのに役立つものがなければ。 –