4
我試圖訓練LSTM來處理一些二進制分類問題。訓練結束後繪製loss
曲線時,會出現奇怪的選區。下面是一些例子:在Keras培訓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。 –