caffe 查看caffemodel中的参数与数据

在用caffe训练完一个模型之后,我们想更加直观的查看这个模型该怎么做呢?
caffe框架训练出来的caffemodel是一个类似于黑盒的东西,我们无法直接看到它的本质,需要借助caffe所定义的接口来协助我们。详细的文档在caffe官网上都有介绍:http://caffe.berkeleyvision.org/
如果我们用f=wx+b来表示运算的过程,
那w和b就是我们需要训练的参数,w称为权值,在cnn中也可以叫做卷积核(filter),b为偏置项。
数据训练完之后,保存在caffemodel里面的,实际上就是各层的w和b
此处附图一张,方便直观理解
这里写图片描述
一.查看caffemodel中的参数
请在spyder中运行以下代码

import sys
caffe_root = '.../'  #填写详细的caffe路径
sys.path.insert(0, caffe_root + 'python')
import caffe
deploy='.../deploy.prototxt' #deploy文件路径    
caffe_model='.../XXX.caffemodel'  #caffemodel的路径
net = caffe.Net(deploy,caffe_model,caffe.TEST) #加载network和model

通过以上的代码就可以将参数和数据加载到一个net变量中了,但是这个变量非常复杂,无法直接显示出来,需要借助各种命令来查看。
net.blobs:保存各层的数据值
net.params:保存各层的参数(w和b)

[(k,v[0].data) for k,v in net.params.items()]

其中k表示层的名称,我们可以在网络的定义中查看各层的名称,
v[0].data是各层中w的值,
v[1].data是各层中b的值。
注意:并不是所有的层都有参数,只有卷积层和全连接层才有

如果想查看某一层的参数,可使用以下命令

w1=net.params['xxx'][0].data   
b1=net.params['xxx'][1].data   

xxx表示为想要查看的层的名称

二.查看caffemodel中的数据
net中刚开始是没有数据的,需要运行以下命令才会有数据

net.forward()

然后使用代码查看各层的数据

[(k,v.data) for k,v in net.blobs.items()]

卷积过后的图片数据为特征,可以用以下命令提取特征

fea=net.blobs['xxx'].data

其中xxx为层的名称

猜你喜欢

转载自blog.csdn.net/swiftfake/article/details/80265712
今日推荐