caffe学习笔记——python+提取caffemodel中的参数及特征

       在公式  y=f(wx+b)中,w和b就是我们需要训练的东西,w称为权值,在cnn中也可以叫做卷积核(filter),b为偏置项。f是激活函数,有sigmoid、tanh、relu等。x是输入的数据。数据训练完成后,保存的caffemodel里面,实际上就是各层的w和b值。

在这里,我们仍用之前训练好的lenet_iter_9380.caffemodel进行试验,在Spyder编译器下观察如下代码:

import caffe
import numpy as np
root='D:/caffe/caffe-master/caffe-master/mnist/'   #根目录
deploy=root + 'mnist/deploy.prototxt'    #deploy文件
caffe_model=root + 'mnist/lenet_iter_9380.caffemodel'   #训练好的 caffemodel
net = caffe.Net(deploy,caffe_model,caffe.TEST)   #加载model和network
[(k,v[0].data.shape) for k,v in net.params.items()]  #查看各层参数规模
w1=net.params['Convolution1'][0].data  #提取参数w
b1=net.params['Convolution1'][1].data  #提取参数b
net.forward()   #运行测试

[(k,v.data.shape) for k,v in net.blobs.items()]  #查看各层数据规模
fea=net.blobs['InnerProduct1'].data   #提取某层数据(特征)

代码解读:

(1)

net = caffe.Net(deploy,caffe_model,caffe.TEST)   #加载model和network

把所有的参数和数据都加载到一个net变量里面,其中:

    net.params: 保存各层的参数值(w和b)

    net.blobs: 保存各层的数据值

(2)要查看各层的参数值,需通过以下命令:

[(k,v[0].data.shape) for k,v in net.params.items()]  #查看各层参数规模

其中,k表示层的名称,v[0].data就是各层的W值,而v[1].data是各层的b值。注意:并不是所有的层都有参数,只有卷积层和全连接层才有。

(3)提取参数w和b

下列代码为提取卷积层“Convolution1”的参数:

w1=net.params['Convolution1'][0].data  #提取参数w
b1=net.params['Convolution1'][1].data  #提取参数b

由此即可得到参数如下:

(4)查看数据

net里面刚开始是没有数据的,若要查看数据,需要先运行net.forward() :

net.forward()   #运行测试
[(k,v.data.shape) for k,v in net.blobs.items()]  #查看各层数据规模

实际上数据刚输入的时候,我们叫图片数据,卷积之后我们就称其为特征了。

运行后我们就可以提取第一个全连接层的数据:

fea=net.blobs['InnerProduct1'].data   #提取某层数据(特征)

运用该程序,我们可以随时查看网络中的各种参数及特征数据。


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值