由于本人专业并非计算机,而是电子。因毕设需要在fpga上实现卷积神经网络,最近才开始接触机器学习。可能写的比较白痴,或者有些并不是最好的方法,但是是我自己亲测可用的方法。 计算机的基础只有一点C++,所以当我需要获得卷积神经网络的weights这些数据的时候,各种求助教程。 在网络上各种大神的教程的帮助下(主要参考以下两篇文章),以及自己不断摸索,终于成功地把weights,bias这些信息导出到txt了。 http://www.cnblogs.com/denny402/p/5686257.html http://www.cnblogs.com/denny402/p/5088399.html 记录一下过程,以防自己忘了,也希望能为刚刚进入接触caffe的完全计算机菜鸟一个参考吧。 0. 安装caffe和训练caffemodel 我caffe是几个月前装的,大部分的过程都是参考http://caffe.berkeleyvision.org 包括我要训练的cnn模型也是教程上的lenet。这些就不详述了,不是本文的重点。 1. 安装pycaffe接口需要的库
sudo apt install python-pip sudo apt-get install python-dev python-numpy cd ~/caffe sudo apt-get install gfortran sudo pip install -r python/requirements.txt看到 “Requirement already satisfied” 即安装完成 2. 修改配置
sudo vi ~/.bashrc在最后面加上
export PYTHONPATH=/home/xxx/caffe/python:$PYTHONPATH这一步我进行的不是很顺畅,vi用的不溜啊。感觉我加的貌似
是有问题的,不过后面还有补救办法 修改Makefile.config 主要是取消了一句注释
WITH_PYTHON_LAYER := 1更新配置文件 (这步根据网上依样画葫芦的)
sudo ldconfig 编译 cd caffe sudo make pycaffe然后pycaffe接口就配好了 4. 进入python 在terminal输入python
import caffe我这个时候就有报错,No module named caffe ********以下就是为了解决No module named caffe这个问题********* 还是在python的环境中
import sys sys.path.append("/home/***/caffe/python") sys.path.append("/home/***/caffe/python/caffe") import os import numpy as np import scipy.io as sio之后import caffe就没毛病啦 (不过这个貌似不能根治这个问题,需要每次使用前都输一次) ********************我是分割线********************** 5. 参数提取
deploy='/home/***/caffe/examples/mnist/lenet.prototxt' caffe_model='/home/***/caffe/examples/mnist/lenet_iter_10000.caffemodel' #训练好的caffemodel net=caffe.Net(deploy,caffe_model,caffe.TEST) #加载model和network然后就是提取参数的过程了,举conv1做例子
w1=net.params['conv1'][0].data b1=net.params['conv1'][1].data然后caffemodel的weights已经在w1中了,bias就在b1中了 6. 输出到txt 由于本人对于python不是很熟悉,于是乎,怎么把w1放到txt中,并且没有中括号,只用“ ”间隔开,也费了一点小功夫 w1是一个20x1x5x5的数组,根据我的需要,我的方法是
w1.tofile('conv1_w.txt',sep=" ",format="%f")然后就获得了想要的conv1的weights啦
之后可以用于matlab验证和在FPGA上计算。
