净手术pycaffe复制重量和重塑

时间:2016-08-10 12:32:36

标签: caffe pycaffe

我正在尝试将预训练模型大小为3x3x3的图层'con_1'的学习权重复制到新图层'con_1_1',以使新图层的大小为6x3x3(6个通道)。我实际上试图将大小为3x3x3的重量复制到6x3x3。我怎么能用pycaffe做到这一点。

      layer name: 'con_1'
      size: 3x3x3

      new layer name: 'con_1_1'
      size: 6x3x3

      con_1_1 should be [con_1, con_1] % just concatenation of two con_1 weights

1 个答案:

答案 0 :(得分:6)

您必须使用.prototxt文件和.caffemodel文件来读取网络。然后将权重从原始网络复制到变量中,然后将它们复制到已编辑的网络中。

net = caffe.Net('path/to/conv.prototxt', 'path/to/conv.caffemodel', caffe.TEST)
W = net.params['con_1'][0].data[...]
b = net.params['con_1'][1].data[...]

net = caffe.Net('path/to/conv2.prototxt', 'path/to/conv2.caffemodel', caffe.TEST)
W_1 = numpy.concatenate(W, W, axis=2)
b_1 = numpy.concatenate(b, b, axis=0)
net.params['con_1_1'][0].data[...] = W_1
net.params['con_1_1'][1].data[...] = b_1

有关详细信息,请查看此link和此link