使用 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 作为预训练模型。这些是我采取的步骤:
从 http://dl.caffe.berkeleyvision.org/bvlc_googlenet.caffemodel 下载 imagenet 并将其放置在 /home/ubuntu/models
2.
一个。将此处 https://github.com/BVLC/caffe/blob/master/models/bvlc_reference_caffenet/train_val.prototxt 中的 "train_val.prototxt" 粘贴到自定义网络选项卡中并
b。 '#' 注释掉了 "source" 和 "backend" 行(因为它在抱怨它们)
- 在预训练模型文本框中粘贴到“.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
digits 4.0 0.14.0-rc.3 /Ubuntu (aws)
训练一个 5 class GoogLenet 模型,每个模型有大约 800 个训练样本 class。我试图使用 bvlc_imagent 作为预训练模型。这些是我采取的步骤:
从 http://dl.caffe.berkeleyvision.org/bvlc_googlenet.caffemodel 下载 imagenet 并将其放置在 /home/ubuntu/models
2.
一个。将此处 https://github.com/BVLC/caffe/blob/master/models/bvlc_reference_caffenet/train_val.prototxt 中的 "train_val.prototxt" 粘贴到自定义网络选项卡中并
b。 '#' 注释掉了 "source" 和 "backend" 行(因为它在抱怨它们)
- 在预训练模型文本框中粘贴到“.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