保存模型后无法训练_谈一谈保存训练精度最优模型的那点事

1

如何保存训练精度最优模型?

这个问题可大可小,很多时候也被我们所忽略,我们确实也不用太关心如何保存模型的问题,很多框架都有帮我们实现好了。但是,我们训练模型的目的不就是要获取到我们认为最优的模型吗,否则我们花那么多力气训练模型干嘛呢?试想一下,当我们用torch.save保存模型的时候忘记了更改模型名字,那么意味着每一次保存的模型名字都一样,新的模型会覆盖掉旧的模型,那真的是悲剧,我们只能祈祷最后一次保存的模型就是本轮次训练最优了!可是,这种想法似乎很难实现,在一轮次训练中,模型性能总会起起伏伏,时好时坏,无法做到一帆风顺。因此,如何保存训练精度最优模型,看起来确实也是一件大事呢!

按照惯例,我们总会有一个超参数用于控制多久或多少步保存一次模型,这也是大部分训练框架的做法。但是,当我们要保存的模型参数很多,模型大小也很大,且训练轮次比较久,比如ResNet152要训练几周,难道真的要每一次都要保存吗?当我们硬盘空间足够大的时候,确实可以每一次都保存模型,但是如果硬盘空间本来就比较吃紧,那就意味着很有可能在某一个训练时间点就爆出空间不足而训练中断问题了!就算空间足够大,让我们每一次都可以保存模型,可是,在训练完成后,我们还是要在一大堆保存模型里面找出哪个才是最优的,可真是麻烦呢!

2

那是不是有更好的保存最优模型方法呢?

办法总是比困难多,当然有了!

最优是靠比较得出来的,假设我们比较标准一致,比如可以拿测试精度或测试损失值大小进行比较,那就可以每一次保存前都进行比较过滤,比如这次测试精度比上一次好那么我们就直接保存该次模型参数权重,否则就直接过滤掉了。这种保存方式意味着最新保存的模型总是最优的,是一种增长式保存模型。但是,就算这种保存方式,也有可能还是保存太多不需要的模型了,那么我们可以事先设定一个可能的测试精度门槛,比如只有大于90%准确率的时候才开始保存模型,这样就可以大大减少保存不必要的模型文件了。

另外一种情况,如果是对已训练模型进行finetune性能提升,那本来就已经是知道该模型上一次最好的精度了,进行finetune就是要获得更优的性能,如果再训练,那就直接将上一轮次的最好指标设定为再训练保存模型门槛,再训练时只有超过该门槛才开始保存模型文件,那这样也是可以起到最大限度避免无用模型文件浪费存储空间的!

此外,还有一种做法,可以更大限度的节省模型存储空间,那就是根据比较标准,每一次达标的模型保存时都直接覆盖掉上一次的模型。这种方式虽然非常大限度的达到节省存储空间,但是也很极端,如果突然在覆盖旧模型的过程中出问题,那就让训练徒劳了,也是很不可取的!那为了防止此类极端情况出现,可以采用折中的方法来实现,就是我们常说的ping-pong做法,限定可以保存两个最优的模型,当已有两个最优模型时,覆盖掉最旧的那个模型,那在最坏的情况下我们也有一个次优的模型存在,而如果不出意外,保存的两个最优模型里最新的那个就是本轮次训练最优的模型了。

3

这些方法看起来真的很简单,但你还真别说,这可以大大节省存储空间呢!我们都知道训练模型不是一蹴而就的事,往往要经过很多次的训练才找到最优模型,那如果每一次都是毫无保留的进行模型保存,那就意味着模型占用的空间越来越多,直到爆出存储空间不足,而如果因为时间过得太久,不知道哪里占用了那么多空间,那么可以考虑一下是不是之前训练保存模型忘记删除了!但如果当初按照正确的方式做好模型保存,也许就没那么容易出现无用模型浪费存储空间的问题了!

以上是笔者从节省存储空间的角度来谈如何更优的进行模型保存,那如果你就是要每一次都要保存模型,因为还有他用,那就老老实实的每一次都保存模型就好了,但如果确实不想让无用模型文件占用太多存储空间,确实可以在保存条件上做些文章,以上做法可以参考一下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值