caffe---之blobs和layers

一.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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值