Matcaffe学习笔记

1、获得深度CNN网络某一层的参数的数值

  • 在Matcaffe中,首先激活caffe,并将Net实例化(比如执行语句caffe_net = caffe.Net(test_net_def_file, 'test')) 。假设你的inputs都已经准备好了。前面的其他步骤此处不再提及。(此处用的是Faster R-CNN中的ZF网络)
  • 看一看Net.m文件中对相关参数的实现。需要传入的参数包括层的名字layer_name,以及blob的索引号blob_index。
    function blob = params(self, layer_name, blob_index)
        %通过layer名称与该层中某个blob的索引,获得该blob的参数
      CHECK(ischar(layer_name), 'layer_name must be a string');
      CHECK(isscalar(blob_index), 'blob_index must be a scalar');
      blob = self.layer_vec(self.name2layer_index(layer_name)).params(blob_index);
    end
  • layer_name是你想获得的参数所在层的名称。通过caffe_net.layer_names命令可获得所有层的名称。比如我想获得conv5的卷积核参数值,则上面的参数layer_name='conv5'
  • 一般,在卷积层,卷积核参数包括两个blob,一个是weights,另一个是biases,前者的blob_index为1,后者的blob_index为2。
  • 获得blob。
conv5_blob_weights = caffe_net.params('conv5' , 1);	%权重blob :
conv5_blob_biases = caffe_net.params('conv5' , 2);	%权重blob :
  • 从权重blob获得数值,使用的是Blob类的get_data()函数。
conv5_weights = conv5_blob_weights.get_data();
conv5_biases = conv5_blob_biases.get_data();
  • 最终,得到的权重和偏置都是4-D的数据,它们也就是卷积核的参数。比如:我的conv5_weights的size为[3,3,384,256],则卷积核的尺寸是3*3大小,被卷积的数据(上一个卷积层输出的卷积特征图)的通道数是384,所以卷积核的通道数也就是384,保持一致。卷积核的第四维度是256,它决定了卷积之后的特征图的通道数是256。我执行conv5_output = caffe_net.blob('conv5').get_data()获得卷积层conv5的输出的数据,那么conv5_output的size为[15,15,256],其中15*15是特征图的大小,256是通道数。conv5_biases的数据说起来是4维的,其实除了第一维度,其他维度都是1,比如此时我的conv5_biases的size为256,对应conv5_weights的“输出维度”256。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值