caffe的python接口学习(8):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(net_file,caffe_model,caffe.TEST)   #加载model和network

就把所有的参数和数据都加载到一个net变量里面了,但是net是一个很复杂的object, 想直接显示出来看是不行的。其中:

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

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

可用命令:

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

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

也可以不查看具体值,只想看一下shape,可用命令

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

假设我们知道其中第一个卷积层的名字叫‘Convolution1‘, 则我们可以提取这个层的参数:

w1=net.params[‘Convolution1‘][0].data
b1=net.params[‘Convolution1‘][1].data

输入这些代码,实际查看一下,对你理解network非常有帮助。

同理,除了查看参数,我们还可以查看数据,但是要注意的是,net里面刚开始是没有数据的,需要运行:

net.forward()

之后才会有数据。我们可以用代码:

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

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

来查看各层的数据。注意和上面查看参数的区别,一个是net.params, 一个是net.blobs.

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

如果要抽取第一个全连接层的特征,则可用命令:

fea=net.blobs[‘InnerProduct1‘].data

只要知道某个层的名称,就可以抽取这个层的特征。

推荐大家在spyder中,运行一下上面的所有代码,深入理解模型各层。

最后,总结一个代码:

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(net_file,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   #提取某层数据(特征)
时间: 2024-12-04 22:45:42

caffe的python接口学习(8):caffemodel中的参数及特征的抽取的相关文章

caffe的python接口学习(7):绘制loss和accuracy曲线

使用python接口来运行caffe程序,主要的原因是python非常容易可视化.所以不推荐大家在命令行下面运行python程序.如果非要在命令行下面运行,还不如直接用 c++算了. 推荐使用jupyter notebook,spyder等工具来运行python代码,这样才和它的可视化完美结合起来. 因为我是用anaconda来安装一系列python第三方库的,所以我使用的是spyder,与matlab界面类似的一款编辑器,在运行过程中,可以查看各变量的值,便于理解,如下图: 只要安装了anac

caffe的python接口学习(6):用训练好的模型(caffemodel)来分类新的图片

经过前面两篇博文的学习,我们已经训练好了一个caffemodel模型,并生成了一个deploy.prototxt文件,现在我们就利用这两个文件来对一个新的图片进行分类预测. 我们从mnist数据集的test集中随便找一张图片,用来进行实验. #coding=utf-8 import caffe import numpy as np root='/home/xxx/' #根目录 deploy=root + 'mnist/deploy.prototxt' #deploy文件 caffe_model=

caffe的python接口学习(4)mnist实例手写数字识别

以下主要是摘抄denny博文的内容,更多内容大家去看原作者吧 一 数据准备 准备训练集和测试集图片的列表清单; 二 导入caffe库,设定文件路径 # -*- coding: utf-8 -*- import caffe from caffe import layers as L,params as P,proto,to_proto #设定文件的保存路径 root='/home/xxx/' #根目录 train_list=root+'mnist/train/train.txt' #训练图片列表

caffe的python接口学习(5):生成deploy文件

如果要把训练好的模型拿来测试新的图片,那必须得要一个deploy.prototxt文件,这个文件实际上和test.prototxt文件差不多,只是头尾不相同而也.deploy文件没有第一层数据输入层,也没有最后的Accuracy层,但最后多了一个Softmax概率层. 这里我们采用代码的方式来自动生成该文件,以mnist为例. deploy.py # -*- coding: utf-8 -*- from caffe import layers as L,params as P,to_proto

caffe的python接口学习(3)训练模型training

如果不进行可视化,只想得到一个最终的训练model, 那么代码非常简单,如下 : import caffe caffe.set_device(0) caffe.set_mode_gpu() solver = caffe.SGDSolver('/home/xxx/data/solver.prototxt') solver.solve() 原文地址:https://www.cnblogs.com/niulang/p/8984829.html

ubuntu配置caffe的python接口pycaffe

参考网站: http://blog.csdn.net/sanmao5/article/details/51923982 (主要参考) https://github.com/BVLC/caffe/issues/782 (问题解决) ubuntu配置caffe的python接口pycaffe 依赖 前提caffe已经正确编译.见Ubuntu配置caffe 库包 sudo apt-get install python-pip sudo atp-get install python-dev python

Python快速学习09: 函数的参数

前言 系列文章:[传送门] 继续干起来!! 正文 我们已经接触过函数,函数是可以被引用的(访问或者以其他变量作为其别名),也作为参数传入函数,以及作为列表和字典等等容器对象的元素(function)的参数(arguments)传递. 传递函数 形式参数       位置参数 默认参数 关键字变量参数 位置传递 例子: def f(a,b,c): return a+b+c print(f(1,2,3)) #在调用f时,1,2,3根据位置分别传递给了a,b,c. 形式参数 关键字传递 用位置传递会感

Python框架学习之Flask中的常用扩展包

Flask框架是一个扩展性非常强的框架,所以导致它有非常多的扩展包.这些扩展包的功能都很强大.本节主要汇总一些常用的扩展包. 一. Flask-Script pip install flask-script 作用: 1. 可以让我们通过命令行的方式启动服务器,还可以手动指定参数,如ip,port. python hello.py runserver -h 127.0.0.1 -p 6666 2. 结合Flask-Migration扩展包可以实现对数据的迁移 二. Flask-WTF 作用是为了能

python接口自动化:pycharm中import yaml报错问题解决

一:问题 python3在cmd命令行中已经安装了yaml,且import yaml是成功的,但是pcharm中import yaml还是红色报错 二:分析原因 pycharm和python环境需要分开安装yaml,只在python环境即cmd中安装yaml是不行的,pcharm还是会报错 三:解决方法 需要分别在python环境和pycharm环境中安装yaml: 1.python环境中安装yaml,cmd命令行执行,python3安装yaml文件命令为:pip install pyyaml