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