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