Caffe 使用总结1:数据访问

通过caffe.Net(model_def, model_weights, mode)可创建一个NN,model_def 为网络结构定义(一般是deploy.prototxt文件) model_weights 为网络权重(.caffemodel文件)

于是,这样一个net有的重要数据:

1. blobs

blobs 包涵data(fp的feature maps)和diff(bp)的两种数据,读取方式:

  • py:

net.blobs[‘layer_name’].data

net.blobs[‘layer_name’].diff

  • matlab:

matlab的 读,取 是分开的

net.blobs(‘layer_name’).set_data()

net.blobs(‘layer_name’).get_data()

net.blobs(‘layer_name’).set_diff()

net.blobs(‘layer_name’).get_data()

稍微回顾一下神经网络的知识就可知道,data在fp之后才能得到(除了第一层,是原始数据),diff在bp之后才能得到。

注意确定data的dimension!

2. params

params就是指网络中的weights,根据神经网络的定义我们知道,每一层都有自己的权重。读取权重的方法是:

  • py:

net.params[‘layer_name’][0].data #weights

net.params[‘layer_name’][1].data #bias

  • matlab:

net.params(‘layer_name’, 1).set_data(net.params(‘layer_name’, 1).get_data() 10); % set weights 10

net.params(‘layer_name’, 2).set_data(net.params(‘layer_name’, 2).get_data() 10); % set bias 10

除了直接访问params的attributes,也可以通过访问layer来获取params

3. layer

通过layer,可以直接定位到net的某一层中,从而获取其中的权重数据。

  • matlab:

net.layers(‘layer_name’).params(1).set_data(net.layers(‘layer_name’).params(1).get_data() 10); % set weights 10

net.layers(‘layer_name’).params(2).set_data(net.layers(‘layer_name’).params(2).get_data() 10); % set bias 10

4. conv计算

just for review,conv的计算式为:

  • witdh: W
  • hight: H
  • kernel_size: K
  • stride: S
  • zero paddings: P

W2 = (W1-F+2P)/S+1
H2 = (H1-F+2P)/S+1