使用bvlc_googlenet作为数字误差预训练模型


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到自定义网络选项卡和

b。'#'注释掉了"source"one_answers"backend"行(因为它在抱怨它们)

  • 在预训练模型文本框中粘贴路径到'. caffmodel '。在我的例子中:"/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。来自github问题等的原始文本,不幸的是没有运气,

    我不知道为什么这变得如此复杂,在旧版本的数字中,我们可以只输入文件夹的路径,它对迁移学习很有效。

    有人能帮忙吗?

    将图层从"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的一体化网络描述。这会省去你很多麻烦。

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

    最新更新