我相信很多第一次做demo的人,当你第一次做实验的时候发现明明我用的是和人家一样的数据集一样的程序,为什么我跑不出人家的效果呢。
那这时候你要看你是如何对网络进行初始化的,就是不管是你让整个网络的参数做特征提取器还是训练,都需要好好的对网络初始化。
以pytorch为例,你可以使用迁移学习,load参数作为pretrained_dict,然后用它对网络进行初始化这样会使得效率大大不同。还有一个问题就是实验你真的复原对了吗,正常来说论文中的方法你跟着用,效果一定不会特别差,如果你特别差首先可能是你的数据集的均值和标准差和原来的很不一样,就算使用迁移学习也没办法达到很好的效果,那这时候要考虑换模型,一个demo可能不适合所有的数据集。还有就是谨慎的使用动量,正则化和weight_decay,当模型的还没有拟合的时候,有时候你使用这些反而达不到好的效果,因为动量是针对loss不再下降,已经拟合的模型,你还没拟合你就开始用,那肯定会影响效果啊。当你发现验证集上面的acc震荡,忽高忽低那可能就已经出现了拟合,此时再去使用就可以减少震荡幅度使模型平衡在一个比较不错的状态。
kaiming初始化是我最近比较喜欢用的,自己认为效果还是不错的,也可以根据需求选择喜欢的初始化方法,这是最近遇到的问题,记录一下。还有就是scheduler.step()要放在optimizer.step()的后面。因为我那天放在了前面程序报错了
原文:https://www.cnblogs.com/daremosiranaihana/p/13291808.html