Caffe官方教程翻译(4):CIFAR-10 turorial
前言
最近打算重新跟著官方教程學習一下caffe,順便也自己翻譯了一下官方的文檔。自己也做了一些標注,都用斜體標記出來了。中間可能額外還加了自己遇到的問題或是運行結果之類的。歡迎交流指正,拒絕噴子!
官方教程的原文鏈接:http://caffe.berkeleyvision.org/gathered/examples/cifar10.html
Alex’s CIFAR-10 tutorial, Caffe style
Alex Krizhevsky的cuda-convert詳細描述了在CIFAR-10數據集上取得了不錯的表現的模型的定義,參數,以及訓練過程等信息。這個例子就是對他的研究結果的基于caffe復現。
事先聲明,我們默認你已經成功地編譯了Caffe源碼。如果沒有,請參考Installation Page。在這篇教程中,我們也默認認為你的caffe安裝在CAFFE_ROOT。
感謝@chyojn對定義模型的模式和解決方案的配置提供幫助。
這個例子也還只會一個半成品。最好還是進一步解釋網絡和訓練選擇的細節,并對整個訓練進行基準測試。
準備數據集
首先你需要從CIFAR-10 website下載并轉換數據集。為了做到這個,直接運行下面的命令:
cd $CAFFE_ROOT ./data/cifar10/get_cifar10.sh ./examples/cifar10/create_cifar10.sh如果終端反饋報錯說wget或是gunzip沒有安裝,你還需要分別安裝他們。在運行了上面的腳本之后,就可以得到數據集:./cifar10-leveldb,還有數據集圖像均值文件:./mean.binaryproto。
模型
CIFAT-10模型是一個由卷積層、池化層、ReLu非線性單元、以及對比規范化的卷積神經網絡,在所有層的最上層有一個線性分類器。我們已經把這個模型定義在了:CAFFE_ROOT/examples/cifar10/cifar10_quick_train_test.prototxt。
訓練并測試”快捷“模型
在你已經寫好了定義網絡的prorbuf和解決方案的protobuf后,訓練模型是很簡單的(參考MNIST Tutorial)。直接運行train_quick.sh,或是輸入如下指令:
cd $CAFFE_ROOT ./examples/cifar10/train_quick.shtrain_quick.sh是一個很簡單的腳本,所以打開它看看。主要的訓練工具就是有train模式的caffe,并且解決方案的protobuf是他的根據。
當你運行代碼時,可以看到如下信息一閃而過:
I0317 21:52:48.945710 2008298256 net.cpp:74] Creating Layer conv1 I0317 21:52:48.945716 2008298256 net.cpp:84] conv1 <- data I0317 21:52:48.945725 2008298256 net.cpp:110] conv1 -> conv1 I0317 21:52:49.298691 2008298256 net.cpp:125] Top shape: 100 32 32 32 (3276800) I0317 21:52:49.298719 2008298256 net.cpp:151] conv1 needs backward computation.這些信息告訴了你各層的細節,它們的連接方式以及輸出大小,這些東西在調試中會有很大幫助。在初始化之后,訓練就會開始:
I0317 21:52:49.309370 2008298256 net.cpp:166] Network initialization done. I0317 21:52:49.309376 2008298256 net.cpp:167] Memory required for Data 23790808 I0317 21:52:49.309422 2008298256 solver.cpp:36] Solver scaffolding done. I0317 21:52:49.309447 2008298256 solver.cpp:47] Solving CIFAR10_quick_train基于solver文件的設置,每迭代100次我們會打印出訓練的loss函數值,并每迭代500次測試一次整個網絡。你會看到類似如下的一些信息:
I0317 21:53:12.179772 2008298256 solver.cpp:208] Iteration 100, lr = 0.001 I0317 21:53:12.185698 2008298256 solver.cpp:65] Iteration 100, loss = 1.73643 ... I0317 21:54:41.150030 2008298256 solver.cpp:87] Iteration 500, Testing net I0317 21:54:47.129461 2008298256 solver.cpp:114] Test score #0: 0.5504 I0317 21:54:47.129500 2008298256 solver.cpp:114] Test score #1: 1.27805對于每一次訓練的迭代,lr是那次迭代的學習率,loss是訓練的損耗函數。對于測試階段的輸出值,score 0表示的是準確率,score 1表示額是測試集的loss函數輸出值。
喝杯咖啡去吧,回來差不多就結束了。
I0317 22:12:19.666914 2008298256 solver.cpp:87] Iteration 5000, Testing net I0317 22:12:25.580330 2008298256 solver.cpp:114] Test score #0: 0.7533 I0317 22:12:25.580379 2008298256 solver.cpp:114] Test score #1: 0.739837 I0317 22:12:25.587262 2008298256 solver.cpp:130] Snapshotting to cifar10_quick_iter_5000 I0317 22:12:25.590215 2008298256 solver.cpp:137] Snapshotting solver state to cifar10_quick_iter_5000.solverstate I0317 22:12:25.592813 2008298256 solver.cpp:81] Optimization Done.我們的模型在測試集上取得了大概75%的準確率。模型的參數都保存在了一個二進制protobuf文件中:cifar10_quick_iter_5000。保存好的這個模型文件也可以在CPU和GPU模式下進行部署。如果要在新的數據集下部署這個模型,請查閱CAFFE_ROOT/examples/cifar10/cifar10_quick.prototxt文件。
為什么要在GPU上訓練?
盡管CIFAR-10數據集依然比較小,但卻已經有足夠多的數據使得GPU的訓練顯得很有吸引了了。
如果要對比GPU和CPU的訓練速度,可以在cifar*solver.prototxt中修改一行:
# solver mode: CPU or GPU solver_mode: CPU然后你就可以使用CPU模式來訓練了。
總結
以上是生活随笔為你收集整理的Caffe官方教程翻译(4):CIFAR-10 turorial的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Caffe官方教程翻译(3):Siame
- 下一篇: Caffe官方教程翻译(5):Class