三个数据集与deploy.prototxt
神經(jīng)網(wǎng)絡(luò)中經(jīng)常會出現(xiàn)三種數(shù)據(jù)集:訓(xùn)練數(shù)據(jù)集train set、驗(yàn)證數(shù)據(jù)集validation set、測試數(shù)據(jù)集test set。對每個訓(xùn)練數(shù)據(jù),計算得到準(zhǔn)確性,在網(wǎng)絡(luò)中后向傳播誤差,從而調(diào)整權(quán)重weights。對每一個驗(yàn)證數(shù)據(jù),也會計算準(zhǔn)確性accurary,當(dāng)準(zhǔn)確性達(dá)到閾值,就退出訓(xùn)練,這是為了防止過度擬合overfitting。
70% should be train cases, 10% will be testcases and the rest 20% should be validation cases.
測試集test set,用來測試最終確定的網(wǎng)絡(luò)的準(zhǔn)確性和預(yù)測能力。
所以容易混淆的就是訓(xùn)練數(shù)據(jù)集和驗(yàn)證數(shù)據(jù)集。訓(xùn)練數(shù)據(jù)集主要用來構(gòu)建模型,網(wǎng)絡(luò)通過對訓(xùn)練數(shù)據(jù)的學(xué)習(xí)得到權(quán)值。驗(yàn)證數(shù)據(jù)集是可選的,用來輔助模型的構(gòu)建,used to tune the parameters [i.e., architecture, not weights] of aclassifier, for example to choose the number of hidden units in a neuralnetwork.。叫輔助是因?yàn)轵?yàn)證數(shù)據(jù)集不能直接參與權(quán)重的調(diào)整,不參與訓(xùn)練,驗(yàn)證集對網(wǎng)絡(luò)是全新的。叫驗(yàn)證集是因?yàn)槲覀円?yàn)證在訓(xùn)練數(shù)據(jù)中準(zhǔn)確性的提升是否可以使模型在驗(yàn)證集中也得到提升。驗(yàn)證集對應(yīng)交叉驗(yàn)證cross validation階段。叫交叉是因?yàn)槲覀兛赡芡瑫r有多個模型同時調(diào)整參數(shù),要對已經(jīng)訓(xùn)練好的模型取誤差最小的。
https://stackoverflow.com/questions/2976452/whats-is-the-difference-between-train-validation-and-test-set-in-neural-netwo
又看到一個形象化的比方:訓(xùn)練集是習(xí)題大全,網(wǎng)絡(luò)通過刷題來學(xué)習(xí)。但是我們不想得到一個過擬合的學(xué)生,不希望它只是簡單地把習(xí)題對應(yīng)的答案記住。所以我們要舉行模擬考試,即驗(yàn)證集。而測試集就好比是高考,來評估網(wǎng)絡(luò)性能的好壞。高考一年只有一次,是要出成績的時候,而模擬考試可以讓我們多次查漏補(bǔ)缺,這就是驗(yàn)證集的意義。有時,把測試數(shù)據(jù)分成兩部分,一部分作為測試數(shù)據(jù),一部分作為驗(yàn)證數(shù)據(jù),所以驗(yàn)證數(shù)據(jù)集可以看作是訓(xùn)練數(shù)據(jù)向測試數(shù)據(jù)的過渡。
https://blog.csdn.net/chenhaifeng2016/article/details/73681910
在mnist文件夾,除了lenet_train_test.prototxt,還有l(wèi)enet.prototxt.兩者類似。只是首尾有差別。查了一下資料,這里的lenet.prototxt應(yīng)該就是用deploy.py生成的deploy.prototxt. lenet_train_test.prototxt是其他地方所指的train_val.prototxthttps://blog.csdn.net/fx409494616/article/details/53008971我安裝的是windows 下c++的caffe,在pycaffe文件夾下也沒有deploy.py文件。應(yīng)該是壓縮包里有已經(jīng)提供了現(xiàn)成的,即lenet.prototxt.有博客講解了如何利用deploy.py生成部署文件,但也有博客說這樣有點(diǎn)復(fù)雜,既然部署文件和訓(xùn)練文件差別很小,可以直接在它的基礎(chǔ)上改動。
那么到底為什么相似,又為什么不同?簡單來說,lenet_train_test.prototxt寫作train_val.prototxt更恰當(dāng),因?yàn)槁?lián)系之前提到的驗(yàn)證數(shù)據(jù)集的作用,這個文件是用來構(gòu)建網(wǎng)絡(luò)模型的,叫做lenet_train_test.prototxt也可以理解,因?yàn)閐elpoy得到的letnet.prototxt是最終用來實(shí)際使用的,即把測試即使是高考,但也只是一種考試,最終還是要步入社會進(jìn)行實(shí)踐。
https://blog.csdn.net/lg1259156776/article/details/52550865
神經(jīng)網(wǎng)絡(luò)中,我們通過最小化神經(jīng)網(wǎng)絡(luò)來訓(xùn)練網(wǎng)絡(luò),所以在訓(xùn)練時最后一層是損失函數(shù)層(LOSS),在測試時我們通過準(zhǔn)確率來評價該網(wǎng)絡(luò)的優(yōu)劣,因此最后一層是準(zhǔn)確率層(ACCURACY)。但是當(dāng)我們真正要使用訓(xùn)練好的數(shù)據(jù)時,我們需要的是網(wǎng)絡(luò)給我們輸入結(jié)果,對于分類問題,我們需要獲得分類結(jié)果,最后一層我們得到的是概率,我們不需要訓(xùn)練及測試階段的LOSS,ACCURACY層了。train_val.prototxt文件里面訓(xùn)練的部分都會在deploy.prototxt文件中刪除。
deploy.prototxt就是在lenet_train_test.prototxt的基礎(chǔ)上稍作改動:
第一層:
input_param { shape: { dim: 1 dim: 1 dim:28 dim: 28 } } 這四個dim參數(shù)分別是
第一個:對待識別樣本圖片進(jìn)行數(shù)據(jù)增廣的數(shù)量,一個圖片會變成10個,之后輸入到網(wǎng)絡(luò)進(jìn)行識別。如果不進(jìn)行數(shù)據(jù)增廣,可以設(shè)置成1。
第二個:圖片的通道數(shù),一般灰度圖片為單通道,則值為1,如果為非灰度圖3通道圖片則為3。
第三個:圖片的高度,單位像素。
第四個:圖片的寬度,單位像素。
https://blog.csdn.net/lanxuecc/article/details/52474476
最后一層:
將accuracy層(type:Accuracy)和loss層(type:SoftmaxWithLoss)替換成name: "prob" type: "Softmax"。因?yàn)橐\(yùn)用于實(shí)際分類中,我們不知道輸入圖像的標(biāo)簽,所以只能得到它屬于各類的概率。
此外,weight_filler、bias_filler也是可以刪除的。因?yàn)檫@兩個參數(shù)的值,由已經(jīng)訓(xùn)練好的模型*.caffemodel文件提供。https://blog.csdn.net/u010417185/article/details/52137825
總結(jié)
以上是生活随笔為你收集整理的三个数据集与deploy.prototxt的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 相关与卷积、各种误差
- 下一篇: 彩色图像处理