一.net.blob实际上是有序字典有序字典
print net.blob
output:
OrderedDict([('data', <caffe._caffe.Blob object at 0x7f0dfffa2d70>), ('conv1', <caffe._caffe.Blob object at 0x7f0dfffa2b90>), ('pool1', <caffe._caffe.Blob object at 0x7f0dfffa2ed8>), ('norm1', <caffe._caffe.Blob object at 0x7f0dfffa2e60>), ('conv2', <caffe._caffe.Blob object at 0x7f0dfffa2aa0>), ('pool2', <caffe._caffe.Blob object at 0x7f0dfffa2938>), ('norm2', <caffe._caffe.Blob object at 0x7f0dfffa28c0>), ('conv3', <caffe._caffe.Blob object at 0x7f0dfffa29b0>), ('conv4', <caffe._caffe.Blob object at 0x7f0dfffa27d0>), ('conv5', <caffe._caffe.Blob object at 0x7f0dfffa2b18>), ('pool5', <caffe._caffe.Blob object at 0x7f0dfffa2848>), ('fc6', <caffe._caffe.Blob object at 0x7f0dfffa2758>), ('fc7', <caffe._caffe.Blob object at 0x7f0dfffa2cf8>), ('fc8', <caffe._caffe.Blob object at 0x7f0dfffa2c80>), ('prob', <caffe._caffe.Blob object at 0x7f0df16c0758>)])
可以看出blob是一个OrderedDict,即有序字典,这个有序字典的key值分别是data,conv1,pool1,norm1等等----即不同层的名字
这个有序字典key所对应的是一个blob对象
如
print net.blob['data']
output:
<caffe._caffe.Blob object at 0x7f0df2f45f50>
然后这个blob对象里面有属性就是两个个四维数组,数组的维度是:维度是:(num,channels,height,width)
这个维度如下:
print net.blob['data'].data.shape
output:
(10, 3, 227, 227)
这个维度由deploy.prototxt中的输入数据维度定义的
每个数组里保存了data和gradient:
net.blobs['data'].data.shape # >> (64, 1, 28, 28)
net.blobs['data'].diff.shape # >> (64, 1, 28, 28)
net.blobs['conv1'].data.shape # >> (64, 20, 24, 24)
net.blobs['conv1'].diff.shape # >> (64, 20, 24, 24)
net.blobs['ip1'].data.shape # >> (64, 500)
net.blobs['ip1'].diff.shape # >> (64, 500)
二.net.layers:主要是用来保存weights和bias
同理,net.layers是一个对象,如下:
<caffe._caffe.LayerVec object at 0x7f0df16bfc20>
layers对象里面的一个属性blobs,如blobs[0]还是一个对象:
<caffe._caffe.Blob object at 0x7f0e1bac5d70>
这个blobs对象的属性data就是数据了,分别保存weights和bias
这是layers的第一层,第一层为数据层所以没有weights和bias,输出len为0
len(net.layers[0].blobs) # >> 0
看第二层:可以看到blobs[0]是里面的data属性是一个四维数组,且保存的是权重
blobs[1]的data属性也是一个四维数组,里面保存的是bias
len(net.layers[1].blobs) # >> 2
net.layers[1].blobs[0].data.shape # >> (20, 1, 5, 5) conv1 weights
net.layers[1].blobs[1].data.shape # >> (20,) bias
net.params还没有去细研究:
以后如果要用到再细细研究:
添加代码如下:
print net.params['conv1'][0].data.shape # (20, 1, 5, 5) conv1 weights
print net.params['conv1'][1].data.shape # (20,) bia
参考:https://blog.csdn.net/wonengguwozai/article/details/54376046