Pytorch实现Early Stopping --- 已解决

楼主这两天在研究torch,思考它能不能像tf中一样有Early Stopping机制,查阅了一些资料,主要参考了这篇博客,总结一下:

实现方法

安装pytorchtools,而后直引入Early Stopping。
代码:

# 引入 EarlyStopping
from pytorchtools import EarlyStopping
import torch.utils.data as Data	# 用于创建 DataLoader
import torch.nn as nn

结合伪代码进行讲解:

model = yourModel()	# 伪代码
# 指定损失函数,可以是其他损失函数,根据训练要求决定
criterion = nn.CrossEntropyLoss()	# 交叉熵损失函数,注意该损失函数对自动对批量样本的损失取平均
# 指定优化器,可以是其他
optimizer = torch.optim.Adam(model.parameters())
# 初始化 early_stopping 对象
patience = 20	# 当验证集损失在连续20次训练周期中都没有得到降低时,停止模型训练,以防止模型过拟合
early_stopping = EarlyStopping(patience, verbose=True)	# 关于 EarlyStopping 的代码可先看博客后面的内容

batch_size = 64	# 或其他,该参数属于超参,对于如何选择超参,你可以参考下我的上一篇博客
n_epochs = 100	# 可以设置大一些,毕竟你是希望通过 early stopping 来结束模型训练
#----------------------------------------------------------------
# 训练模型,直到 epoch == n_
  • 9
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
PyTorch EarlyStopping 是一个用于在训练过程中提前停止模型训练的技术。当模型在训练过程中出现过拟合或者性能不再提升时,EarlyStopping 可以帮助我们停止训练,以避免过拟合并节省时间和计算资源。 在 PyTorch 中,我们可以通过自定义一个 EarlyStopping 类来实现这个功能。以下是一个简单的示例代码: ```python import numpy as np import torch class EarlyStopping: def __init__(self, patience=5, delta=0): self.patience = patience self.delta = delta self.best_loss = np.Inf self.counter = 0 self.early_stop = False def __call__(self, val_loss): if val_loss < self.best_loss - self.delta: self.best_loss = val_loss self.counter = 0 else: self.counter += 1 if self.counter >= self.patience: self.early_stop = True return self.early_stop ``` 在训练过程中,我们可以使用 EarlyStopping 类来监测验证集的损失值,并在满足停止条件时停止训练。例如: ```python # 创建 EarlyStopping 实例 early_stopping = EarlyStopping(patience=3) for epoch in range(num_epochs): # 训练模型 # 在验证集上计算损失值 val_loss = calculate_validation_loss(model, validation_data) # 检查是否满足停止条件 if early_stopping(val_loss): print("Early stopping") break # 继续训练 ``` 在上述示例中,`patience` 参数表示允许验证集损失连续 `patience` 个 epoch 没有下降的次数,`delta` 参数表示损失值必须至少下降 `delta` 才会被认为是有明显改进。如果连续 `patience` 次都没有达到这个改进,训练将被停止。 这就是 PyTorch EarlyStopping 的基本用法,它可以帮助我们更加高效地训练模型,并避免过拟合。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值