通过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