一、说明
记录自己使用早停法来解决过拟合问题的经历。
这里给出的是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):意思就是说,每次循环都会检查一下是否符合早停的条件,如果符合就跳出循环,否则就继续循环。
以上就是早停法的使用流程了,希望可以帮到你。