实践是检验真理的唯一标准
resnet20,cifar100.
Direct training:
和原论文一样的参数
64.45
time step 1, Accuracy = 0.5918
time step 2, Accuracy = 0.6320
time step 4, Accuracy = 0.6446
time step 8, Accuracy = 0.6531
time step 16, Accuracy = 0.6608
time step 32, Accuracy = 0.6631
和原论文69.97相差比较大。
加了部分预处理,参数不变(这里参数改成和下面一样变说不定就可以):
64.69
time step 1, Accuracy = 0.5931
time step 2, Accuracy = 0.6319
time step 4, Accuracy = 0.6387
time step 8, Accuracy = 0.6483
time step 16, Accuracy = 0.6601
time step 32, Accuracy = 0.6645
实验证明:原论文在扯淡。鉴定完毕。
师哥full precision pretrain,然后做finetune
- epoch = 200
lr = 0.01
wd = 1e-5
128 sgd cosine
69.24 可以达到原论文的精度。
time step 1, Accuracy = 0.5398
time step 2, Accuracy = 0.6123
time step 4, Accuracy = 0.6373
time step 8, Accuracy = 0.6618
time step 16, Accuracy = 0.6954
time step 32, Accuracy = 0.7061
总结:
- 对于cifar10来说,按照原论文直接训练量化网络的效果不错,这是因为cifar10是最简单的数据集;但是杜宇cifar100来说,如果去除了预训练的模型,效果就大打折扣
-5%
,因为训练难度升高了。 - 直接训练一个全精度的网络对于cifar100也要load一个pretrain的model,精度才能达到很高
-
一般量化过程是,先导入一个pretrain的model(这个model就是原始的vgg或者resnet里的model)这样可以直接load进来,然后再改模型,这样模型的参数并不是全部随机的,而是已经有部分是最优的。
而一般导一个自己模型训练好的模型的顺序是先把模型改好再导入你用该模型训练好的pth文件,这样才能load进来,逻辑上有些不同,体现在导入这个过程是在更改模型前还是后。 - finetune的过程要把学习率和wd设置的小一点epoch也可以小一点,上面那个finetune的过程是 lr=0.01.wd=1e-5 (直接训练为0.02,wd=5e-4)
泽凯哥:
多卡训练注意调整:batch_size * 4, lr * 2(根号下)
torch.optim.lr_scheduler.ReduceLROnPlateau
理想状态下的收敛效果:
文章来源:https://www.toymoban.com/news/detail-627422.html
pip intall fasteai
文章来源地址https://www.toymoban.com/news/detail-627422.html
到了这里,关于实验心得,包括代码复现工作的体会的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!