caffe新手常遇到的三个问题
??剛剛訓(xùn)練完了mnist數(shù)據(jù)集,不過大多數(shù)人肯定都是按照網(wǎng)上的博客一步一步跟著操作的吧!其實(shí)也不是很懂。不知道你的心里是否有以下三個(gè)問題呢?
??1.怎么進(jìn)行數(shù)據(jù)格式處理?/怎么生成LMDB/LEVELDB格式數(shù)據(jù)?
??2.怎么編寫網(wǎng)絡(luò)結(jié)構(gòu)文件?
??3.怎么編寫網(wǎng)絡(luò)求解文件?
??這篇文章,我們就來回答一下這三個(gè)問題。為以后自己熟練的訓(xùn)練模型打下一個(gè)堅(jiān)實(shí)的基礎(chǔ)!
一、怎么進(jìn)行數(shù)據(jù)格式處理?/怎么生成LMDB/LEVELDB格式數(shù)據(jù)?
??在caffe中,作者為我們提供了這樣一個(gè)文件:convert_imageset.cpp,存放在根目錄下的tools文件夾下。編譯之后,生成對(duì)應(yīng)的可執(zhí)行文件放在 buile/tools/ 下面,這個(gè)文件的作用就是用于將圖片文件轉(zhuǎn)換成caffe框架中能直接使用的lmdb文件。
??通用步驟:
??1. 獲取數(shù)據(jù)集
??(如果網(wǎng)上有的可以下載,也可以自己進(jìn)行制作)數(shù)據(jù)集就是圖片,目前數(shù)據(jù)集格式可能是png,jpg,bmp或二進(jìn)制文件等等
??2. 為自己的數(shù)據(jù)制作標(biāo)簽(label)
??在caffe中,標(biāo)簽制作比較麻煩,但也有方法可循。標(biāo)簽文本文件的內(nèi)容就是圖片的位置后加圖片的類別。例如(/home/user/1.jpg 1)。標(biāo)簽的文件制作,后面會(huì)專有一篇博客去談?wù)?#xff0c;感興趣的朋友可以寫出來后去參考。(ps:對(duì)于mnist數(shù)據(jù)集因?yàn)槭莄affe本身自帶,就讓標(biāo)簽這部分透明了,使用者不需要去管。但要想搞自己的東西,這步還是必不可少滴!)
??3. 調(diào)用caffe工具(圖像格式轉(zhuǎn)換):
??以mnist數(shù)據(jù)集為例:Minst數(shù)據(jù)集轉(zhuǎn)換工具位置:caffe/examples/minst/convert_cifar_data.cpp。運(yùn)行.examples/minst/create_minsh.sh(不過數(shù)據(jù)集轉(zhuǎn)換的腳本需要我們自己編寫,后面的博客我也會(huì)詳細(xì)介紹滴!)生成lmdb格式的位置是自己定義的。比如mnist數(shù)據(jù)集中就會(huì)在caffe/examples/minst/下生成的。
二、怎么編寫網(wǎng)絡(luò)結(jié)構(gòu)文件?
??打開網(wǎng)絡(luò)結(jié)構(gòu)的文件,會(huì)發(fā)現(xiàn)都是Layer。Layer是什么呢?(我在此簡(jiǎn)單的介紹下,更為詳細(xì)的還要去看caffe的語(yǔ)法書)
??Layer是一個(gè)大類:主要包含NeuronLayer類,LossLayer類,數(shù)據(jù)。
基本格式:
Layer{
??xxx:”xxx”
??xxx:”xxx”
}
Layer的結(jié)構(gòu)是:
layers {
??bottom: “decode1neuron” // 該層底下連接的第一個(gè)Layer,代表輸入
??bottom: “flatdata” // 該層底下連接的第二個(gè)Layer
??top: “l(fā)2_error” // 該層頂上連接的一個(gè)Layer,代表輸出
??name: “l(fā)oss” // 該層的名字
??type: EUCLIDEAN_LOSS // 該層的類型
??loss_weight: 0
}
??注意:
??bottom是上面的層,個(gè)數(shù)不唯一,top是下面的層。可理解為bottom是輸入,top是輸出。后面的內(nèi)容就是每層的name
??type是層數(shù)的種類,是基本固定的。類型種類如下(具體情況見caffe/proto):
??1)vision 5層:Convolution,Deconvolution,Im2col,LRN,Pooling
??2)激活 9層:AbsVal,BNLL,Dropout,Power,ReLU,Sigmoid,TanH, Threshold ,EXP
??3)common 10層:ArgMax,Concat,Eltwise,Flatten,InnerProduct,MVN,Silence,Softmax,Split,Slice
??4)data 7層:Data,DummyData,HDF5Data,HDF5Output,ImageData,MemoryData,WindowData
??5)loss 8個(gè):Accuracy,ContrastiveLoss,EuclideanLoss,HingeLoss,InfogainLoss,MultinomialLogisticLoss,SigmoidCrossEntropyLoss,SoftmaxWithLoss
??Param中包含本層的參數(shù),參數(shù)不止一個(gè),各個(gè)獨(dú)立的參數(shù)之間使用{}分隔。獨(dú)立參數(shù)內(nèi)包括各個(gè)超參數(shù)。整體格式為:
Param{
??超參數(shù)類型:超參數(shù)數(shù)值
}
??(什么是超參數(shù)呢?為什么會(huì)有一個(gè)“超”字呢?(cool!)其實(shí)所謂的超參數(shù),就是模型中那些可以人為設(shè)定的參數(shù),通過修改超參數(shù)可進(jìn)行模型的微調(diào)。為了與一般的參數(shù)區(qū)別,即謂之超參數(shù)。~哦,原來是這樣!)
??卷積層超參數(shù)類型包括:num_output(卷積核個(gè)數(shù)), pad, kernel_size, stride等(超參數(shù)類型取決于param的類型,我猜應(yīng)該有張表,但我未找到)
??大家可以從下面這位博主的這篇博客里見一見卷積層,激活層的示例,會(huì)更深刻的理解:https://blog.csdn.net/wendygelin/article/details/88405871[]link](https://blog.csdn.net/wendygelin/article/details/88405871)
??下面開始正式回答第二個(gè)問題:
??答案就是:基本不用自己寫。只需要每次改變下train和test兩個(gè)Layer中l(wèi)mdb的位置就行。(當(dāng)然了,此方法只適用于新手。到了后期肯定要開發(fā)出自己的模型。但那個(gè)時(shí)候水平相比很高了,就不是我能說的了~)
三、怎么編寫網(wǎng)絡(luò)求解文件(solver文件)?
??Slover作為控制模型的核心,我理解為整個(gè)模型的頭文件。
??Slover文件中包括寫程序的人設(shè)置的一些超參數(shù)(學(xué)習(xí)率,優(yōu)化器類型,迭代次數(shù)等等)
??對(duì)于solver文件的介紹給大家推薦一篇博客,感覺寫的比我好多了(我不再獻(xiàn)丑了~):https://blog.csdn.net/qq_26898461/article/details/50445392link
??不過我給大家介紹一下目前為止,我經(jīng)歷過solver文件中常修改的參數(shù):
??因?yàn)槲覀兊哪P痛蠖嗍菑木W(wǎng)絡(luò)上下載的——對(duì)對(duì)對(duì)!就是那個(gè)面向github編程。關(guān)于優(yōu)化器的一些參數(shù)都是已經(jīng)調(diào)好的,不再修改。當(dāng)然,路過大神請(qǐng)無(wú)視,當(dāng)聽了個(gè)玩笑。
??常修改的參數(shù)包括網(wǎng)絡(luò)文件參數(shù)net、測(cè)試集迭代次數(shù)test_iter(有需要的修改)、終端間隔顯示display(這個(gè)我建議CPU的選手可以初始設(shè)定為1,看迭代1次需要花多長(zhǎng)時(shí)間,再判斷迭代多少次比較合適)、最大迭代數(shù)max_iter、訓(xùn)練多少次保留caffemodel的snapshot、caffemodel保留位置參數(shù)snapshot_prefix、決定訓(xùn)練方式的solver_mode。例如mnist數(shù)據(jù)集的solver文件如下:
??買三送一,再來一個(gè)!
??迭代和epoch的區(qū)別?
??迭代是進(jìn)行完一次batch_size,一個(gè)epoch是進(jìn)行完一個(gè)數(shù)據(jù)集內(nèi)所有的數(shù)據(jù),一個(gè)epoch中有個(gè)total/batch_size次迭代。
??學(xué)習(xí)就是慢慢解決問題的過程,希望以后遇到的問題越來越多,解決的問題也越來越多。不過這三個(gè)問題(哦,四個(gè))你也解決了嗎?
由于本文作者水平有限,如有不足之處,請(qǐng)下方評(píng)論區(qū)指正,謝謝!
總結(jié)
以上是生活随笔為你收集整理的caffe新手常遇到的三个问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构与算法——二叉排序树详解以及代码
- 下一篇: 编译正确,运行ORB_SLAM3报错Se