使用bvlc_googlenet作为数字中的预训练模型 - 错误

时间:2016-10-01 22:11:59

标签: deep-learning caffe nvidia-digits

digits 4.0 0.14.0-rc.3 /Ubuntu (aws)

训练5级GoogLenet模型,每个班级有大约800个训练样本。我试图使用bvlc_imagent作为预先训练的模型。这些是我采取的步骤:

  1. http://dl.caffe.berkeleyvision.org/bvlc_googlenet.caffemodel下载了imagenet并将其放在/ home / ubuntu / models

  2. 2。

    一个。粘贴" train_val.prototxt"从此处https://github.com/BVLC/caffe/blob/master/models/bvlc_reference_caffenet/train_val.prototxt进入自定义网络标签和

    湾'#'评论了"来源"和"后端"线(因为它抱怨他们)

    1. 在预先训练过的模型中,文本框粘贴了“.caffemodel'”的路径。就我而言:" /home/ubuntu/models/bvlc_googlenet.caffemodel"
    2. 我收到此错误:

      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.
      

      我已经从github问题等粘贴了各种train_val.prototext,遗憾的是没有运气,

      我不确定为什么这会变得如此复杂,在旧版本的数字中,我们可以只输入文件夹的路径,它非常适合转移学习。

      有人可以帮忙吗?

1 个答案:

答案 0 :(得分: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 / classifier”的权重是针对1000级分类问题(1000x1024),并且您尝试将它们复制到一个6级分类问题的层中(6x1024) )。重命名图层时,Caffe不会尝试复制该图层的权重,而是随机初始化权重 - 这就是您想要的。

另外,我建议你使用这个网络描述,它已经被设置为GoogLeNet的一体化网络描述。它会为你省去一些麻烦。

enter image description here