digits 4.0 0.14.0-rc.3 /Ubuntu (aws)
训练一个5类GoogLenet模型,每个类大约有800个训练样本。我试图使用bvlc_imagent作为预训练模型。以下是我采取的步骤:
从http://dl.caffe.berkeleyvision.org/bvlc_googlenet.caffemodel下载imagenet并放置到/home/ubuntu/models
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