我是Pytorch和机器学习新手,我在本教程https://www.learnopencv.com/image-classification-using-transfer-learning-in-pytorch/中遵循本教程,并使用我的自定义数据集。然后我在本教程中遇到了同样的问题,但我不知道如何在Pytorch中进行提前停止,如果你有更好的不创建提前停止过程,请告诉我。
我是Pytorch和机器学习新手,我在本教程https://www.learnopencv.com/image-classification-using-transfer-learning-in-pytorch/中遵循本教程,并使用我的自定义数据集。然后我在本教程中遇到了同样的问题,但我不知道如何在Pytorch中进行提前停止,如果你有更好的不创建提前停止过程,请告诉我。
4条答案
按热度按时间izkcnapc1#
这是我在每个时代所做的
不知道有多正确(这段代码大部分是从别的网站上的帖子里拿来的,但是忘记了在哪里,所以我不能放参考链接。我只是稍微修改了一下),希望你能觉得有用,如果我说错了,请指出错误。谢谢
9rnv2umw2#
请尝试以下代码。
2uluyalo3#
提前停止的想法是,如果在监控的数量上没有改善的迹象,则通过停止训练过程来避免过拟合,例如,验证损失在几次迭代之后停止减少。提前停止的最小实现需要3个组件:
best_score
变量,用于存储验证损耗的最佳值counter
变量,用于跟踪运行的迭代次数patience
变量定义了允许在确认丢失时继续训练而不进行改进的历元数。如果counter
超过此值,则停止训练过程。伪代码如下所示
我为Pytorch实现了一个通用的提前停止类,用于我的一些项目。它允许你选择任何感兴趣的验证量(损失,准确性等)。如果你喜欢更好的提前停止,那么请随时在repo early-stopping中检查它。也有一个示例笔记本供参考
wqsoz72f4#
在PyTorch中实现提前停止的一种方法是使用一个回调函数,在每个历元结束时调用该函数。该函数可以检查验证丢失,如果丢失在一定数量的历元内没有改善,则停止训练。
下面是一个如何实现这一点的示例:
定义一个函数来检查验证损失是否改善了def check_validation_loss(model,best_loss,current_epoch):
计算验证损失
val_loss = calculate_validation_loss(model)
定义函数以计算验证损失def calculate_validation_loss(model):
TODO:计算验证损失
定义培训循环
训练模型一个时期
train_model(model, epoch)
这段代码使用一个字典来跟踪最佳验证损失和它发生的时间。check_validation_loss函数计算验证损失,并将其与最佳损失进行比较,如果应该停止训练,则返回True。
请注意,calculate_validation_loss函数并未在此程式码中实作,因此您需要为此加入自己的实作。train_model函数也未实作,但可以用您自己的训练程式码取代。
或者,您可以使用PyTorch中现有的提前停止实现之一,如torch.optim.lr.ReduceLROnPlateau或torch.utils.callbacks.EarlyStopping,而不是实现您自己的提前停止。这些实现的使用方式与上述代码类似,但为控制提前停止行为提供了更多的灵活性和选项。