美文网首页
ResNet50使用预训练参数和从零开始训练的异同

ResNet50使用预训练参数和从零开始训练的异同

作者: LabVIEW_Python | 来源:发表于2021-03-23 11:11 被阅读0次

本文主要比较在Cifar10数据集上从零开始训练ResNet50网络和使用预训练参数(load imagenet pretrained weight)训练ResNet50网络的异同。

运行环境(在下面的环境中测试通过):

  • Python = 3.7.9 64bit
  • Paddle GPU = 2.0.1 安装命令:conda install paddlepaddle-gpu==2.0.1 cudatoolkit=10.0 -c paddle
  • OS = Windows10 64bit

测试结果

比较项 从零开始训练, 手动建模 从零开始训练, 使用模型库 使用预训练参数
Batch size 256 256 256
Epochs 20 20 10
eval_freq 5 5 2
测试数据集上的精度 76.71% 78.08% 88.99%
从零开始训练, 手动建模
从零开始训练, 使用模型库
使用预训练参数,在第一个Epoch就能达到很高的精度了

结论

  • 若是学生,推荐手动编写ResNet,这样可以加深对模型的理解;虽然有好的轮子,也要自己造一造,通过造轮子来加深对知识的理解。
  • 若是做项目的工程师,推荐使用深度学习框架模型库里面的模型,好处是bugs少。若分类对象跟ImageNet图像类似,可以直接使用预训练参数,这样训练时间少,模型精度高,更加适合工程应用。
  • 工程应用尽量避免造轮子,因为造轮子的过程中大概率会引入bug,还需要花很多时间精力进行调优,最终结果也不如现成的轮子好用。
  • 若有自己的大型数据集和GPU集群,比如:3亿人脸,可以不断优化业务方向上的预训练参数。在业务落地的过程中,高精度的预训练参数,直接影响项目交付的质量和速度。

本项目的范例代码https://gitee.com/ppov-nuc/resnet_pretrained_demo

相关文章

网友评论

      本文标题:ResNet50使用预训练参数和从零开始训练的异同

      本文链接:https://www.haomeiwen.com/subject/qfixhltx.html