2016-10-01 74 views
1
digits 4.0 0.14.0-rc.3 /Ubuntu (aws) 

訓練5類GoogLenet模型,每個類有大約800個訓練樣本。我試圖使用bvlc_imagent作爲預先訓練好的模型。這是我所採取的步驟:使用bvlc_googlenet作爲數字中的預訓練模型 - 錯誤

  1. http://dl.caffe.berkeleyvision.org/bvlc_googlenet.caffemodel下載imagenet並將其放置在/ home/Ubuntu的/模型

  2. 2.

一個。 b。將「train_val.prototxt」從這裏https://github.com/BVLC/caffe/blob/master/models/bvlc_reference_caffenet/train_val.prototxt粘貼到自定義網絡選項卡中並且

b。 '#'將「源」和「後端」行註釋掉(因爲它正在投訴它們)

  1. 在預先訓練過的模型文本框中粘貼路徑到'。 caffemodel」。在我的情況: 「/home/ubuntu/models/bvlc_googlenet.caffemodel」

我得到這個錯誤:

ERROR: Cannot copy param 0 weights from layer 'loss1/classifier'; shape mismatch. Source param shape is 1 1 1000 1024 (1024000); target param shape is 6 1024 (6144). To learn this layer's parameters from scratch rather than copying from a saved net, rename the layer. 

我已經粘貼各種train_val.prototext從GitHub的問題等,並沒有運氣不幸的是,

我不確定爲什麼這會變得如此複雜,在老版本的數字中,我們只需輸入文件夾的路徑,它對傳輸學習很有幫助。

有人可以幫忙嗎?

+0

你不應該使用這個train_val.prototxt:https://github.com/BVLC/caffe/blob/master/models/bvlc_googlenet/train_val.prototxt – Dale

回答

3

將圖層從「loss1/classifier」重命名爲「loss1/classifier_retrain」。

當微調的典範,這裏是來自Caffe做什麼:

# pseudo-code 
for layer in new_model: 
    if layer.name in old_model: 
    new_model.layer.weights = old_model.layer.weights 

你得到一個錯誤,因爲「loss1 /分類」的權重分別爲1000級分類問題(1000x1024),並且您正試圖將它們複製到6層分類問題(6x1024)的圖層中。當您重命名圖層時,Caffe不會嘗試複製該圖層的權重,並且您可以隨機初始化權重 - 這正是您想要的。

此外,我建議您使用此網絡描述,該描述已經設置爲GoogLeNet的一體化網絡描述。它會爲你節省一些麻煩。

https://github.com/NVIDIA/DIGITS/blob/digits-4.0/digits/standard-networks/caffe/googlenet.prototxt