【问题标题】:How can I implement early stopping and reduce learning rate on plateau in Tensorflow?如何在 Tensorflow 中实现早期停止并降低高原学习率?
【发布时间】:2022-04-08 14:34:57
【问题描述】:

我想为使用tensorflow构建的神经网络模型实现两个回调EarlyStoppingReduceLearningRateOnPlateau。 (我没有使用Keras

下面的示例代码是我在自己写的脚本中如何实现早停的,不知道对不对。

# A list to record loss on validation set
val_buff = []
# If early_stop == True, then terminate training process
early_stop = False

while icount < maxEpoches:

    '''Shuffle the training set'''
    '''Update the model by using Adam optimizer over the entire training set'''

    # Evaluate loss on validation set
    val_loss = self.sess.run(self.loss, feed_dict = feeddict_val)
    val_buff.append(val_loss)

    if icount % ep == 0:

        diff = np.array([val_buff[ind] - val_buff[ind - 1] for ind in range(1, len(val_buff))])
        bad = len(diff[diff > 0])
        if bad > 0.5 * len(diff):
            early_stop = True

        if early_stop:
            self.saver.save(self.sess, 'model.ckpt')
            raise OverFlow()
        val_buff = []

    icount += 1

当我训练模型并跟踪验证集的损失时,我发现损失会上下波动,因此很难判断模型何时开始过度拟合。

既然EarlystoppingReduceLearningRateOnPlateau很相似,那如何修改上面的代码来实现ReduceLearningRateOnPlateau呢?

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    振荡错误/丢失很常见。实施提前停止或学习率降低规则的主要问题是验证损失计算发生在相对较晚的位置。为了解决这个问题,我可能会建议下一条规则:当最佳验证错误至少过去 N 个时期时停止训练。

    max_stagnation = 5 # number of epochs without improvement to tolerate
    best_val_loss, best_val_epoch = None, None
    
    for epoch in range(max_epochs):
        # train an epoch ...
        val_loss = evaluate()
        if best_val_loss is None or best_val_loss < val_loss:
            best_val_loss, best_val_epoch = val_loss, epoch
        if best_val_epoch < epoch - max_stagnation:
            # nothing is improving for a while
            early_stop = True
            break  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多