【问题标题】:Strange loss curve while training LSTM with Keras使用 Keras 训练 LSTM 时出现奇怪的损失曲线
【发布时间】:2017-12-15 02:01:41
【问题描述】:

我正在尝试针对一些二元分类问题训练 LSTM。当我在训练后绘制loss 曲线时,其中有一些奇怪的选择。以下是一些示例:

这是基本代码

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()

我不明白为什么会出现这种选择?有什么想法吗?

【问题讨论】:

  • 你会打乱你的训练数据吗?

标签: machine-learning neural-network deep-learning keras lstm


【解决方案1】:

出现这种情况的可能性有很多:

  1. 你的参数轨迹改变了它的吸引力盆地 - 这意味着你的系统离开了一个稳定的轨迹并切换到另一个。这可能是由于随机化,例如批量抽样或辍学。

  2. LSTM 不稳定性- LSTM被认为在训练方面极不稳定。也有报道称,他们通常需要很长时间才能稳定下来。

由于最新的研究(例如来自here),我建议您减少批量大小并将其留给更多时期。我也会尝试检查是否例如就需要学习的模式数量而言,网络的拓扑结构并不复杂(或简单)。我也会尝试切换到GRUSimpleRNN

【讨论】:

  • 感谢您的回答。我会试一试,然后告诉你结果。
  • 很好的提示,@nabroyan 是的,这几乎总是可以归因于批量太大。我也会尝试不同的优化器,具有调整学习率的 rmsprop 和 adadelta 有时可能是一个不错的选择。如果没有什么可以帮助以相当小的学习率直接下降到 SGD。
【解决方案2】:

这个问题很老了,但我之前从检查点重新开始训练时看到过这种情况。如果峰值对应于训练的中断,则您可能无意中重置了一些权重。

【讨论】:

    猜你喜欢
    • 2017-06-26
    • 2019-09-22
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 2021-01-16
    • 2019-04-02
    相关资源
    最近更新 更多