图像分类实战,三-pytorch+SE-Resnet50+Adam+top1-96

top1直达96的模型:

pytorch框架、网络模型SE-Resnet50,优化算法Adam


pytorch:

pytorch官方文档,每个模块函数都有github源码链

教程的链接 http://pytorch.org/tutorials/

官方网站的连接 http://pytorch.org/

pytorch的github主页https://github.com/pytorch/pytorch

Pytorch(一个优雅的框架)https://www.jianshu.com/p/6b96cb2b414e

Pytorch[facebook]是一个python优先的深度学习框架,是一个和tensorflow[google、工程能力强],Caffe,MXnet[amazon], theano[适合科研]一样,非常底层的框架,它的前身是torch,主要的语言接口是Lua,在如今github上前10的机器学习项目有9个都是python的时代,一直没有太多的人使用,比较小众。而pytorch如今重新归来,用python重写了整个框架,又重新回到了程序员的视线。

在如今机器学习框架百出的时代,并没有哪个框架是最好的,每个框架都有各自的优点。我们有必要掌握不同的框架,不要说精通每个框架,至少能够看看这个框架下的代码,因为github上不断地有牛人论文复现,而他们用的框架肯定不会都是一样的,所以你至少要能够阅读别人写的在各个框架下的代码。

使用keras & pytorch 的优缺点:

[keras] 一个很高层的结构,它的后端支持theano或tensorflow,它本质上并不是一个框架,只是对框架的操作做了一个封装,你在写keras的时候其实是对其后端进行调用,相当于你还是在tensorflow或者theano上跑程序,只不过你把你的语言交给keras处理了一下变成tensorflow听得懂的语言,然后再交给tensorflow处理,这样的后果当然方便你构建网络,方便定义模型做训练,极快的构建你的想法,工程实现很强,但是这样也有一个后果,那就是细节你没有办法把控,训练过程高度封装,导致你没有办法知道里面的具体细节,以及每个参数的具体细节,使得调试和研究变得很困难。

[pytorch] 一个底层框架,类似theano & tensorflow。它的底层优化仍然实在c上的,但是它基本所有的框架都是用python写的。


SE-Resnet50_33epoch:

1. SE-Resnet,ImageNet2017的冠军

2. 网络模型,50层,训练了33个epoch。

3. top1-96。


Adam:

1. 了解adam和sgd的区别

https://blog.csdn.net/jiachen0212/article/details/80086926

sgd是最初的一种优化算法,深度学习优化算法经历了 SGD -> SGDM -> NAG ->AdaGrad -> AdaDelta -> Adam -> Nadam 这样的发展历程。

另外,说到优化算法,入门级必从 SGD 学起,老司机则会告诉你更好的还有 AdaGrad / AdaDelta,或者直接无脑用 Adam。可是看看学术界的最新 paper,却发现一众大神还在用着入门级的 SGD,最多加个 Momentum 或者 Nesterov,还经常会黑一下Adam

2. 优化算法的选择和使用:

一般先用adam,再使用sgd

3. 总结:

Adam收敛更快,时间成本低

Sgd速度比较慢,但效果更好,假如时间充裕使用agd