在Caffe中,我希望仅使用预训练的AlexNet架构的权重,这些权重是使用ImageNet数据集训练的,仅限于前两层,并且我想在这些层之后添加一个softmax分类器。我想知道如何从一个包含更大网络结构(真正的“深”AlexNet结构)的权重文件中提取仅这前两层的权重。
回答:
补充Shai的回答 –
如果你不需要完整的权重文件,
为了提取所需层的权重,可以使用net surgery:
net = caffe.Net(prototxt, caffemodel, caffe.TRAIN)outnet = caffe.Net(predefined_prototxt_with_desired_layers_only, caffe.TRAIN)layers_to_copy = ['conv1', 'conv2', 'conv3']for layer in layers_to_copy: for i in range(0, len(net.params[layer])): #这用于复制权重和偏置,如果存在偏置 outnet.params[layer][i].data[...]=np.copy(net.params[layer][i].data[...])outnet.save(new_caffemodel_name)