由于本人专业并非计算机,而是电子。因毕设需要在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上计算。