我想获得预先构建的caffe模型的第6层的输出并在其上训练SVM。我的目的是构建一个自定义图像分类器,用户可以在其中创建自定义图像类,并在这些类之间对输入图像进行分类,而不是imagenet类。这里是伪代码:
#input
file='cat.jpg'
image=caffe.io.load_image(file)
#model
net = caffe.Classifier('deploy.prototxt','model.caffemodel')
#compute activation at layer 6 --- Need help here. Will net.forward help? will the activation be retained?
#extract features from layer 6:
features = net.blobs['fc6'].data[4][:,0, 0]
#SVM
category=svm.predict(features)
print get_category_name(category)
答案 0 :(得分:5)
您应该使用Net
课程,而不是Classifier
。因此,您只需致电net.forward()
。
要注意的两件事:
Transformer
课程here以供参考。如果仅使用
提取功能features = net.blobs['fc6'].data
您的数组将被下一个forward()
电话覆盖。确保您正在执行深层复制,例如
features = net.blobs['fc6'].data.copy()