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 时,确保它不会影响后续计算。
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值