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

Using bvlc_googlenet as pretrained model in digits - errors

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

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

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

  2. 2.

一个。将此处 https://github.com/BVLC/caffe/blob/master/models/bvlc_reference_caffenet/train_val.prototxt 中的 "train_val.prototxt" 粘贴到自定义网络选项卡中并

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

  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.

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

我不确定为什么这会变得如此复杂,在旧版本的数字中,我们只需输入文件夹的路径,这对迁移学习非常有效。

有人可以帮忙吗?

将层从 "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-class class 化问题 (1000x1024),而你正试图将它们复制到6-class class化问题 (6x1024) 的层。当您重命名该层时,Caffe 不会尝试复制该层的权重,您会得到随机初始化的权重 - 这就是您想要的。

此外,我建议您使用此网络描述,它已设置为 GoogLeNet 的一体式网络描述。它会为你省去一些麻烦。

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