早停止(Early Stopping)-PyTorch版本(代码使用教程)

一、说明

记录自己使用早停法来解决过拟合问题的经历。

这里给出的是pytorch版本,需要tensorflow版本的,可以使用chatgpt转换,也可以自己转换。

二、原理

这个早停法的原理就是,对比你每次的验证loss,如果超过20epoch(可以自己设置)都没有上升,就认为过拟合了,就会跳出循环,停止代码。

ex:假如你跑到43个epoch,验证loss=0.02,等到跑到63个epoch时,验证loss始终没有低于0.01,就会停止代码

三、代码实现

首先提供原github链接,有兴趣的朋友可以看一下这个。

https://github.com/Bjarten/early-stopping-pytorch

如果不能进github下载的话,下面是我下载好的链接。

蓝奏云:https://wwqg.lanzouj.com/igmg71d0dicd

1.我先介绍一下这个参数

  • patience:上次模型在验证集上损失降低之后等待的epoch,此处设置为20。
  • verbose:默认为False,是否显示loss具体下降了多少。
  • counter:用于统计等待了多少个epoch,大于你设置的patience之后,就会停止循环。
  • best_score:记录模型评估的最好loss,用于比较。
  • early_step:默认为False,如果为True,模型就停止循环。
  • val_loss_min:默认为正无穷(np.Inf), 模型评估损失函数的最小值。
  • delta:默认为0, 表示模型损失函数改进的最小值,当超过这个值时候表示模型有所改进。

2.现在讲一下怎么使用。

1.首先,将github链接中的“pytorchtools.py”文件加入到你的项目中。

2.然后这样。

在开头引用

这一步其实可以不用,直接在调用的时候给参数。

不过,如果你代码中有这个参数设置的话,就写一行这个代码,如果没有的话,就不用写了。

注:如果你代码中有很多个要给参数的地方,这样写每次改一下就可以,否则改一下参数,要改很多个地方。

这个调用不要放到每次epoch的循环里,放到外面。如果没有刚才那个参数设置,这里args.patience就替换成你要设置参数。

下面这段代码放到epoch循环里面的最后位置就可以了

注:for循环就是类似这种:

for epoch in range(args.epoch):

意思就是说,每次循环都会检查一下是否符合早停的条件,如果符合就跳出循环,否则就继续循环。

以上就是早停法的使用流程了,希望可以帮到你。

四、效果图

猜你喜欢

转载自blog.csdn.net/lihaiyuan_0324/article/details/134078739