deepnet是多伦多大学计算机系机器学习组开发的一个神经网络工具包,可以进行以下计算:
1. Feed-forward Neural Nets
2. Restricted Boltzmann Machines
3. Deep Belief Nets
4. Autoencoders
5. Deep Boltzmann Machines
6. Convolutional Neural Nets
主要的成果是其中的DBM,可用于多模态建模。论文是“Multimodal Learning with Deep Boltzmann Machines”
大部分内容转载自机器学习_刘伟
1、下载Deepnet,解压并仔细阅读目录下的INSTALL.txt文件。
2、安装python数学工具包numpy,scipy和nose,如在终端上执行:
$ sudo apt-get install python3-numpy
可参考这里
测试,如scipy
python >>> import scipy >>> reload(scipy)
3、安装CUDA
增加关于CUDA的环境变量,修改文件~/.bashrc
$ sudo vi .bashrc
在最下面加上 export CUDA_BIN=/usr/local/cuda-6.5/bin export CUDA_LIB=/usr/local/cuda-6.5/lib64 export PATH=${CUDA_BIN}:$PATH export LD_LIBRARY_PATH=${CUDA_LIB}:$LD_LIBRARY_PATH
4、安装Protocol Buffers
官网下载,我使用protobuf-2.6.1.tar.gz。
cd至下载路径
解压
$ tar zxvf protobuf-2.6.1.tar.gz
进入解压目录
$ cd protobuf-2.6.1
安装源码,配置、编译、编译检查、安装
$ ./configure $ make $ make check $ make install
增加环境变量
$ sudo vi .bashrc #在最下面加上 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
测试
$ protoc --version
libprotoc 2.6.1
错误 ImportError: No module named google.protobuf
cd到解压后的protobuf文件夹下的python文件夹,执行
sudo python setup.py install
错误 error: package directory 'google/protobuf/compiler' does not exist
解决办法:在google/protobuf/下创建compiler文件夹
检查
sudo python setup.py test
错误 ImportError: No module named descriptor_cpp2_test
无法解决!!!求教!!(但貌似对结果无影响)
5、cudamat编译
$ cd cudamat文件夹 $ make
deepnet作者上传的cudamat有所缺失,下载cudamat工具包并make编译,将编译后文件夹中的learn.py、learn.pyc(我这没有)和 libcudalearn.so复制到deepnet的cudamat文件夹下即可。现在cudamat已经改版,需要文件的请联系我。
增加cudamat环境变量
$ sudo vi .bashrc
在最下面加上(这里下载的deepnet名字为deepnet-master,我将其改为deepnet,并且里面还有一个deepnet子文件夹) export PATH=/home/username/deepnet/cudamat:$PATH export LD_LIBRARY_PATH=/home/username/deepnet/cudamat:$LD_LIBRARY_PATH export PYTHONPATH=${PYTHONPATH}:/home/username/deepnet/deepnet export PYTHONPATH=$PYTHONPATH:/home/username/deepnet
6、下载MNIST数据集,cd到deepnet/deepnet/examples目录下运行
$ python setup_examples.py <path to mnist dataset> <output path>
这句主要是配置数据集和输出文件的位置。到examples下的任一目录执行可执行文件runall.sh,如在deepnet/deepnet/examples/rbm下执行:
$ sh runall.sh
遇到的问题
1、deepnet的python需要matplotlib包,而matplotlib包又依赖于freetype(提供读取TTF字体文件)和libpng(提供加载和保存PNG文件),因此这两者需要先安装。我在装freetype时遇到了问题。
运行runall.sh时,显示“No such file or directory: u'tmp/matplotlib-username/frontList.cache'”
原因:缺失matplotlib-username文件夹(username是我用户名)
解决:
$ mkdir /tmp/matplotlib-username
2、运行runall.sh时,出现“No GPU board available”
原因:deepnet将GPU关闭
解决:更改 /deepnet/deepnet下的trainer.py文件,将main中的两个if : board = LockGPU()和board = FreeGPU()注释掉,用以下两行来替代GPU的初始化设置,放在main第一行:
cm.cuda_set_device(0) cm.cublas_init()
3、运行cudamat出现错误,如下图
原因:我的机器GPU为GTX750,CUDA是6.5,作者使用的GPU或CUDA版本比较低,当在cudamat下make的时候,不兼容。
解决:更改Makefile文件
vi Makefile
我的Makefile如下
即增加了35和50两行。