2017-04-11 45 views
-1

我想建立一個CNN來分類狗。事實上,我的數據集由5類狗組成。我有50個狗的圖像分爲40個圖像進行訓練,10個進行測試。 我已經訓練了我的網絡,基於AlexNet預訓練模型超過100,000次和140,000次迭代,但準確度始終在20%到30%之間。 事實上,我已經適應了AlexNet的問題,如下所示:我將上一次完全連接的網絡和num_output的名稱更改爲5.此外,我更改了第一個完全連接的圖層(fc6)的名稱。爲什麼我的基於Alexnet的CNN在分類上失敗了?

那麼爲什麼即使我使用數據增強(裁剪)這個模型失敗了?

我應該在我的網絡頂層使用線性分類,因爲我有一點數據和類似於AlexNet數據集(這裏提到的transfer learning),或者我的數據集與AlexNet和I的原始數據集有很大不同應該在早期的網絡中訓練線性分類器?

這裏是我的求解器:

net: "models/mymodel/train_val.prototxt" 
test_iter: 1000 
test_interval: 1000 
base_lr: 0.01 
lr_policy: "step" 
gamma: 0.1 
stepsize: 100000 
display: 20 
max_iter: 200000 
momentum: 0.9 
weight_decay: 0.0005 
snapshot: 1000 
snapshot_prefix: "models/mymodel/my_model_alex_net_train" 
solver_mode: GPU 
+0

你的批量是多少? **求解器**文件的訓練參數是什麼?還有很多其他的考慮,但這是一個好的開始。 – Prune

回答

1

雖然你沒有給我們有很多的調試信息,我懷疑你已經做了一些嚴重過擬合。一般來說,模型訓練的「甜蜜點」取決於時代,而不是迭代。單節點AlexNet和GoogleNet在ILSVRC風格的數據庫上訓練,時間爲50-90。即使您的批量小到1,您也只需要5個班就可以培訓2500個時代。每個類只有8個圖像,AlexNet拓撲爲嚴重矯枉過正,可能適用於每張個人照片。考慮到這一點:你只有40張訓練照片,但是第一個卷積圖層有96個核心,第二個卷積圖層有256個。這意味着你的模型可以在conv1中花費2個內核,在conv2中花費6個,爲,每個花費照片!你沒有獲得任何功能的通用性,沒有平均值...而不是邊緣檢測一般來尋找面孔,你將有專門的濾鏡調整到單個照片。

總之,您的模型是訓練找到「波莉姨媽的狗在廚房櫥櫃前的綠色地毯上,左邊有一片太陽。」它不需要學會歧視Basenji,只是爲了識別每張照片中隨機方便的東西。

+0

你能解釋一下新紀元和迭代之間有什麼區別,以及如何修復新紀元的數量? – user7417788

+0

在這裏,讓我爲你搜索... [answer](http://stackoverflow.com/questions/4752626/epoch-vs-iteration-when-training-neural-networks#31842945)。您可以更改solver.prototxt文件中的迭代次數。 – Prune

+0

謝謝你的幫助,所以我的問題的解決方案是有更多的數據? – user7417788