【问题标题】:Can I terminate an epoch (and go to the next round of weight initialization) based on validated loss with keras?我可以根据 keras 的验证损失终止一个时期(并进入下一轮权重初始化)吗?
【发布时间】:2018-08-07 10:36:15
【问题描述】:

我正在 Keras 中训练一个卷积神经网络,在后端使用 Tensorflow。为此,我想做 100 轮,每轮最多 12 个 epoch。

到目前为止,我所经历的是,在 6 到 10 个 epoch 之后,验证损失开始增加,而损失仍然减少。由于我认为这是由于过度拟合造成的,因此我很想终止这一特定的回合,并在验证的损失开始增加(2 轮)后继续进行下一轮。

Keras 是否提供执行此操作的选项?在他们的文档中要查找的搜索词是什么?

【问题讨论】:

  • “下一轮权重初始化”是什么意思?

标签: python tensorflow keras conv-neural-network


【解决方案1】:

是的,您可以按照此处所述使用提前停止:

EarlyStopping

【讨论】:

  • 如果您希望它在停止改进后继续运行两轮,请设置耐心 = 2。
【解决方案2】:

您可以提前停止训练,但 Keras 不会让您在 epoch 结束后终止训练。

示例:

from keras import callbacks

early_stopping = callbacks.EarlyStopping(monitor='val_loss', min_delta=0, patience=5, verbose=1, mode='auto')

model.fit(X_train,
          y_train,
          epochs=10,
          batch_size=64,
          validation_data=(X_val, y_val),
          callbacks=early_stopping)

您可以尝试的另一种方法是降低学习率。

early_stopping = callbacks.EarlyStopping(monitor='val_loss', min_delta=0, patience=5, verbose=1, mode='auto')
reduce_lr = callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.2, patience=8, min_lr=0.0001, verbose=1)


model.fit(X_train,
          y_train,
          epochs=10,
          batch_size=64,
          validation_data=(X_val, y_val),
          callbacks=[early_stopping, reduce_lr])

确保 patience 设置为不同的值,以便模型在 5 个 epoch 后首先调整学习率,而 val_loss 没有改善,然后在 8 个 epoch 后完全停止训练。

希望这会有所帮助。

【讨论】:

  • 谢谢,我确实以不同的耐心实现了这两个选项。我发现很多人使用 0.2 的因子来降低他们的学习率(LR)。我该如何解释这个因素?当前的LR乘以这个因子吗?
  • 根据 Keras 官方文档 - 因子:学习率将降低的因子。 new_lr = lr * 因子。所以是的,你是对的。
  • 另外,如果对您有任何帮助,请接受答案。谢谢。
  • 您的意思是通过接受“支持”吗?我确实赞成它,但我没有足够的声誉点让它显示在屏幕上。还是谢谢!
  • 那是你赞成的不同答案,不是我的。不过没关系,希望您能够解决您遇到的任何问题。
猜你喜欢
  • 2017-11-15
  • 2022-01-24
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-20
  • 1970-01-01
相关资源
最近更新 更多