Pytorch设置早停止early stop

早停止(Early Stopping)是 当达到某种或某些条件时,认为模型已经收敛,结束模型训练,保存现有模型的一种手段

设置早停类

class EarlyStopping():
    """
    Early stopping to stop the training when the loss does not improve after
    certain epochs.
    """
    def __init__(self, patience=5, min_delta=0):
        """
        :param patience: how many epochs to wait before stopping when loss is
               not improving
        :param min_delta: minimum difference between new loss and old loss for
               new loss to be considered as an improvement
        """
        self.patience = patience
        self.min_delta = min_delta
        self.counter = 0
        self.best_loss = None
        self.early_stop = False
    def __call__(self, val_loss):
        if self.best_loss == None:
            self.best_loss = val_loss
        elif self.best_loss - val_loss > self.min_delta:
            self.best_loss = val_loss
            # reset counter if validation loss improves
            self.counter = 0
        elif self.best_loss - val_loss < self.min_delta:
            self.counter += 1
            print(f"INFO: Early stopping counter {self.counter} of {self.patience}")
            if self.counter >= self.patience:
                print('INFO: Early stopping')
                self.early_stop = True

__init__()

self.patience定义了我们早停前,允许验证损失不在降低的epoch次数。注意这是连续(consecutive)epoch数,不是累计的(cumulative)epoch数目。

patience:这个是当有连续的patience个轮次数值没有继续下降,反而上升的时候结束训练的条件(以val_loss为例)

self.min_delta定义了界定new loss和best loss之间的差异,是否有提升的判断阈值

delta:这个就是控制对比是的”标准线“

self.counter统计早停前,当前loss连续没有提升的epoch数

__call__()

它用于实现早停逻辑。在训练开始时,我们将当前的损失定为best loss。然后检查当前loss与best loss的差是否小于min_delta量。如果是,更新best loss,并重置counter。如果不是,则在counter加1。每当counter大于patience时,早停。early_stop为True并在屏幕上打印一些信息。

Dropout随机丢弃层

nn.Dropout
torch.nn.Dropout 是 PyTorch 深度学习框架中的一个模块,主要用于在训练神经网络时进行正则化和防止神经元间的共同适应。

用途
正则化:Dropout 通过在每次前向传播时随机将输入张量的某些元素置零,从而减少模型对特定数据的依赖,提高泛化能力。
防止共同适应:通过随机关闭神经网络中的某些神经元,迫使网络分散学习特征,防止神经元之间的过度依赖。
用法
p 参数:表示每个元素被置零的概率。默认值为 0.5。
inplace 参数:如果设置为 True,将直接在原始输入上进行操作,以节省内存。默认值为 False。
使用技巧
通常在全连接层之后使用 Dropout。
在训练时使用 Dropout,但在验证和测试时不使用。可以通过模型的 .train() 和 .eval() 方法来控制。
p 的选择取决于具体问题和模型架构,一般介于 0.2 到 0.5。
注意事项
Dropout 只应在训练阶段使用,不应在评估和测试阶段使用。
在使用 inplace=True 时,确保它不会影响后续计算。
 

 

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在深度学习的训练中,early stop(提前停止)是一种常用的策略,用于避免模型过拟合。PyTorch提供了一种方便的方式来实现early stopearly stop是通过监控模型在验证集上的性能来实现的。训练过程中,我们会在每个epoch结束后计算模型在验证集上的性能指标(例如准确率、损失函数值等),并与之前的最佳性能进行比较。如果当前性能较好,则更新最佳性能,并保存模型的参数(权重和偏置)。如果连续多个epoch的性能没有提升,则我们可以提前终止训练,以防止过拟合。 在PyTorch中,实现early stop可以使用一个变量来记录最佳性能,一个变量来记录连续的性能下降次数,以及一个变量来保存当前最佳模型的参数。 在每个epoch结束后,我们可以根据验证集的性能来更新这些变量。如果当前性能较好,则更新最佳性能和模型参数。如果性能下降,则将连续下降次数加1;如果连续下降次数达到一定阈值(可以根据需求设置),则终止训练。 可以使用一个循环来实现early stop。在每个epoch的循环中,首先计算模型在验证集上的性能,并与之前的最佳性能进行比较。如果当前性能较好,更新最佳性能和模型参数;如果性能下降,将连续下降次数加1。然后检查连续下降次数是否达到阈值,如果达到则终止训练。 在early stop过程中,我们可以使用PyTorch的模型保存功能来保存最佳模型的参数,以便后续测试或使用。此外,还可以使用PyTorch提供的训练监控工具(例如TensorBoard)来可视化训练过程中的性能变化,方便实时监控模型的训练情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值