caffe---之blobs和layers

一.net.blob实际上是有序字典有序字典

print net.blob

output:

OrderedDict([('data', ), ('conv1', ), ('pool1', ), ('norm1', ), ('conv2', ), ('pool2', ), ('norm2', ), ('conv3', ), ('conv4', ), ('conv5', ), ('pool5', ), ('fc6', ), ('fc7', ), ('fc8', ), ('prob', )])

可以看出blob是一个OrderedDict,即有序字典,这个有序字典的key值分别是data,conv1,pool1,norm1等等----即不同层的名字

这个有序字典key所对应的是一个blob对象

print net.blob['data']

output:  

然后这个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是一个对象,如下:

layers对象里面的一个属性blobs,如blobs[0]还是一个对象:

这个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

你可能感兴趣的:(caffe)