caffe的python接口caffemodel指标及特征抽取实例
作为本际云服务器推荐网的小编小本本,今天给大家分享一篇关于caffe的python接口caffemodel指标及特征抽取的实例。希望对那些对此领域感兴趣的研究人员有所帮助。

特征抽取代码实现
接下来,我们将分步骤介绍如何实现特征抽取。如果我们使用公式计算y=f(wx+b)来描述全部计算全过程,那么w和b就是我们必须锻炼的物品,w称之为权重值,在cnn之中能够称为池化层(filter),b是偏置项。f是激活函数,有sigmoid、relu等。x便是键入数据信息。算法训练结束后,储存的caffemodel里边,实际上是每层的w和b值。
首先,我们需要载入模型和网络:
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
接下来,我们将储存的每层变量值(w和b)和数据值存储到net的params和blobs属性中。其中,params用于储存每层的变量值(w和b):
[(k,v[0].data)for k,v in net.params.items()]
该代码可以检查每层的变量值,其中k表示层名称,而v[0].data表示每层的W值,而v[1].data是每层的b值。需要留意的是,并非所有的层都是有指标,唯有卷积层和池化层才会。
接下来,我们可以通过指定层名称来获取特定层的参数w和b。例如,如果我们想要第一位卷积层的W值和b值,可以键入以下代码:
w1=net.params['Convolution1'][0].data
b1=net.params['Convolution1'][1].data
如果我们不需要具体数值,而是只想看一下shape,可以使用以下指令调用net.forward()获取每层数据:
net.forward()
假定我们都知道在其中第一位卷积层名字叫Convolution1,则我们能获取这一层指标:
[(k,v.data.shape)for k,v in net.blobs.items()]
顺便提一下,blobs属性是用于储存每层的数据值。同样,只要知道某个层的名称,就可以抽取这个层的特征,比如抽取第一个全连接层的特征:
fea=net.blobs['InnerProduct1'].data
最后,让我们总结一下特征抽取代码:
import caffe
import numpy as np
root='/home/xxx/' #根目录
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 #提取某层数据(特征)
这就是我们今天要介绍的内容。希望能对大家有所帮助。祝愿大家多多的发展,尽早涨薪!
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6879.html
