2
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”

我收到此错误:

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 不幸的是,没有运气,

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

有人可以帮忙吗?

4

1 回答 1

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 的一体化网络描述的网络描述。它会为你省去一些麻烦。

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

于 2016-10-03T17:22:13.737 回答