caffe学习笔记
caffe學習筆記
標簽:?caffe 2016-09-23 18:34?181人閱讀?評論(0)?收藏?舉報 ?分類: caffe(10)?版權聲明:我的技術文章可以隨意轉載,大家都是為了學習
accuracy為0:最后一層的輸出不等于樣本類別數。
synset_words.txt 從0開始一個類名對應一個數字,如?
car 0?
cat 1?
dog 2
學習速率可以減小,否則下降太快,加大學習率會加快擬合速度,但是如果調得太大會導致切線旋轉過度而無法收斂。
Convolution 層使用一系列可訓練的卷積核對輸入圖像進行卷積操作,每組卷積核生成輸出圖像中的一個特征圖。
InnerProduct 層(也被稱作全連接層)將輸入看成一個一向量,輸出也為向量(輸出 blob的高和寬都為 1)?
。
fine-tuning
finetune的過程相當于繼續訓練,跟直接訓練的區別是初始化的時候:?
a. 直接訓練是按照網絡定義指定的方式初始化(如高斯隨機初始化)?
b. finetune是用你已經有的參數文件來初始化(就是之前訓練好的caffemodel)
fine_tuning的過程其實就是用訓練好的參數(可以從已訓練好的模型中獲得)初始化自己的網絡,然后用自己的數據接著訓練,參數的調整方法與 from scratch訓練過程一樣(梯度下降)。對于初始化過程,我們可以稱自己的網絡為目標網絡,訓練好的模型對應網絡為源網絡,要求目標網絡待初始化的層要 與源網絡的層相同(層的名字、類型以及層的設置參數等等均相同)。
finetune 的好處就是可以直接獲得我們難以或者無法訓練的底層參數.
output要與樣本類別一致
如果使用cpu模式,那么最后的-gpu省略。?
●Train as normal
layer{
layer {
name: “fc8”
name: “fc8-t”
type: “innerproduct”
num_output: 1000
num_output: 397
… …}
}調用模型開始訓練:
./build/tools/caffe train \ -solver models/finetune_flickr_style/solver.prototxt \ -weights models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel \ -gpu 0- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
將這些輸進命令行里
數據準備
標簽數據文件里的文件路徑和圖片的路徑要對應的起來,比如val.txt文件的某一行的圖片路徑,是否在val文件夾下面:?
生成lmdb文件,create_imagenet.sh中主要內容
solver.prototxt?
stepsize:100000每100K次迭代,降低學習速率?
batch_size就是你的網絡一次正向傳播處理的輸入樣本數量,?
test_iter就是你的網絡遇到TEST這個階段的時候,要進行多少次迭代,所以說,當你進行TEST階段時,會進行test_iter次迭代,也就是test_iter次正向傳播,每次是batch_size個輸入樣本,所以總共會處理test_iter * batch_size個樣本。batch_size是每次迭代測試的圖片張數 ,在測試時,應該保證batch_size*test_iter>=測試圖片數?
batch比較小,導致樣本覆蓋面過低,產生了非常多的局部極小點,在步長和方向的共同作用下,導致數據產生了震蕩,導致了不收斂。在這種情況下,把learning rate調節到了0.02,相當于加大了步長,這樣可以在一定程度上避免震蕩,可以越過局部極小點往比較大的極值點行走。
測試
2.raw_scale = 255 是像素值范圍,不是(0,1),因為我們使用了均值文件,雖然減去了均值,但是還是255的范圍.不然肯定出錯
3.image_dims = (100,100)這個是你打包圖片進行訓練的時候使用的尺寸,也要一致,不然就會報錯.
4.mean = (**).mean(1).mean(1)這個后面加mean(1)..應該是numpy的一個功能,可以使分類結果更加突出,這時測試過得,也會使錯誤結果更加錯~~- - !
./build/examples/cpp_classification/classification.bin **/**/deploy.prototxt **/***/models_iter_100000.caffemodel **/**/image_mean.binaryproto **/**/labels.txt **/**/car.jpg- 1
- 1
這些路徑按自己的設置,labels是標簽,比如你的train.txt中白色標簽是0,紅色標簽是1,那么labels中第一行是white,第二行是red,其他的也是這樣按順序排。
恢復訓練?
把resume_training.sh也復制進myself,修改內容為:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
這里的caffenet_train_1000.solverstate就是存儲了恢復solver狀態所需的所有必要信息的快照,具體是哪個solverstate是可以自己改的。?
運行腳本:
./examples/imagenet/myself/resume_training.sh
Andrew Ng的《機器學習》公開課:?https://class.coursera.org/ml?
Coursera公開課筆記中文版(神經網絡的表示):?http://52opencourse.com/139/coursera公開課筆記-斯坦福大學機器學習第八課-神經網絡的表示-neural-networks-representation?
Coursera公開課視頻(神經網絡的學習):?http://52opencourse.com/289/coursera公開課視頻-斯坦福大學機器學習第九課-神經網絡的學習-neural-networks-learning?
斯坦福深度學習中文版:?http://deeplearning.stanford.edu/wiki/index.php/UFLDL教程
總結
- 上一篇: 浅谈caffe中train_val.pr
- 下一篇: Caffe部署中的几个train-tes