Caffe学习系列(一)Ubuntu16.04下搭建编译Caffe环境,并运行MNIST示例(仅CPU)
前言:学习深度学习是从本科毕业设计开始,如今学习了不少理论知识,利用Caffe框架要付诸实践了,记录下来学习过程,也算是心路历程。
刚开始搭建Caffe环境遇到很多的问题,先放弃安装GPU相关的环境了,先在CPU下训练,尽管跑训练速度很慢,但以后再解决GPU的问题。
正文:
1、安装必要依赖包:
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install python-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
PYTHON需要2.7版本,这是操作系统本身已经安装好的. 输入python2.7 --version 会显示具体的版本号说明安装了.
2、下载Caffe
首先安装git工具:
sudo apt-get install git
然后下载caffe包:
git clone https://github.com/BVLC/caffe.git
接下来进入caffe目录下(我讲caffe下载到/home下了)。
cd caffe/
进入里面的PYTHON文件夹,然后输入
for req in $(cat requirements.txt); do pip install $req; done
如果没有pip,得先安装一下: sudo apt install python-pip
3、安装Caffe
进入caffe根目录,使用模板写个Makefile.config. 具体就是先复制一下模板, 再改一些内容
cp Makefile.config.example Makefile.config
首先,#CPU MODE下,在CPU_ONLY := 1前面的#要去掉. (因为仅在CPU下跑Caffe)
然后,在其中找到如下内容,两个路径要改成这样:(添加后面的两个hdf5的路径, 否则编译时报hdf5错误)
# Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial
现在准备就绪,开始安装Caffe:
依次执行下列命令:
make pycaffe make all make test make runtest
当我执行make pycaffe命令的时候,报了错:fatal error: numpy/arrayobject.h没有那个文件或目录
其实numpy已经是安装的,anaconda2里面有,Python中import numpy也没有问题,但就是在此处报错,解决方法:
sudo apt-get install python-numpy
然后再执行一遍 make pycaffe命令就行了。
显示所有的TESTS PASSED,说明已经安装好了。
如果遇到:fatal error: hdf5.h: 没有那个文件或目录”,解决办法如下:
在Makefile.config文件的第85行,添加/usr/include/hdf5/serial/ 到 INCLUDE_DIRS,也就是把下面第一行代码改为第二行代码。
将# Whatever else you find you need goes here.下面的
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改为:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
在Makefile文件的第173行,把 hdf5_hl 和hdf5修改为hdf5_serial_hl 和 hdf5_serial,也就是把下面第一行代码改为第二行代码。
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5 LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
cd /usr/lib/x86_64-linux-gnu
然后根据情况执行下面两句:
sudo ln -s libhdf5_serial.so.10.1.0 libhdf5.so
sudo ln -s libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so
之后继续编译就行了。
4、配置python
在caffe根目录的python文件夹下,有一个requirements.txt的清单文件,上面列出了需要的依赖库,按照这个清单安装就可以了。
因为前面配置有报错,所以执行一下一下语句查看:
sudo pip install -r python/requirements.txt
结果打印如下:
UndefinedEnvironmentName: 'extra' does not exist in evaluation environment.
You are using pip version 8.1.1, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
显示scikit-image错误, 那就安装一下scikit-image就好了。
按照提示,执行一下语句:
pip install --upgrade pip
然后执行:
pip install scikit-image
去到Caffe根目录里面的python文件夹, 把当前路径记录下来(pwd). 然后在终端下输入以下命令(把记下的路径改在相应地方),回车
export PYTHONPATH=/path/caffe/python:$PYTHONPATH
这时候应该可以了,试验一下:
# python
Python 2.7. (default, Nov , ::)
[GCC 5.4. ] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import caffe
>>>
当import caffe后回车,没有报错,说明python环境已经搭建好。
问题:
当我再进入系统的时候import caffe失效
直接使用export 时 只是在当前的登录窗口中有效,一旦关闭就会失效
解决如下:
$注意: /path/to/caffe/python 这是你的caffe的路径下面的python 我查了一下Ubuntu中有很多文件可以存放 PYTHONPATH=/path/to/caffe/python:$PYTHONPATH 添加到 $sudo vim /etc/profile PYTHONPATH=/path/to/caffe/python:$PYTHONPATH export 添加完成后记得要 source profile
解决目前的困难。
更新:在我远程控制时,出现如下错误:
这个错误一般是因为你在远程登陆服务器,而caffe python中 matplotlib是绘图功能,需要在图形界面才行,这时候可以在import之前加入如下代码解决:
打开 {caffe_root}/python/caffe/__init__.py Add the following lines to the top: import matplotlib
matplotlib.use('Agg')
解决当前困难。
5、训练MNIST集
将终端定位到Caffe根目录
然后执行脚本文件,下载MNIST数据库并解压缩
./data/mnist/get_mnist.sh
我由于网络问题没有收到HTTP返回,所以按照脚本里的代码,根据网址在网上下载压缩包,cp到mnist文件夹下,使用脚本里的解压命令依次解压。
然后,将其转换成Lmdb数据库格式
./examples/mnist/create_mnist.sh
然后训练网络
./examples/mnist/train_lenet.sh
训练的时候可以看到损失与精度数值
可以看到最终训练精度是0.9911
成功完成。
分享只为更好的记录~
by still、
Caffe学习系列(一)Ubuntu16.04下搭建编译Caffe环境,并运行MNIST示例(仅CPU)的更多相关文章
- caffe学习一:ubuntu16.04下跑Faster R-CNN demo (基于caffe). (亲测有效,记录经历两天的吐血经历)
兜兜转转,兜兜转转; 一次有一次,这次终于把Faster R-CNN 跑通了. 重要提示1:在开始跑Faster R-CNN之前一定要搞清楚用的是Python2 还是Python3. 不然你会无限次陷 ...
- Ubuntu16.04下搭建Go语言环境
1. 安装GO sudo apt-get install golang-go 2. 设置Go环境变量 打开终端,输入命令: export GOROOT=$HOME/goexport PATH=$GOR ...
- ubuntu14.04下搭建python+mysql环境
简略记录ubuntu14.04下搭建python操作的mysql服务器的过程和其中遇到的问题及解决方法. 第一部分: 安装mysql 安装步骤:1. sudo apt-get install mysq ...
- Ubuntu 12.04下搭建Qt开发环境
http://download.qt.io/official_releases/qt/ Ubuntu 环境下Gtk与Qt编译环境安装与配置(系统环境是Ubuntu 12.04) 1.配置基础开发环境G ...
- Ubuntu16.04下搭建开发环境及编译tiny4412 Android系统【转】
本文转载自:http://blog.csdn.net/songze_lee/article/details/72808631 版权声明:本文为博主原创文章,未经博主允许不得转载. 1.安装ssh服务器 ...
- JVM(一) OpenJDK1.8源码在Ubuntu16.04下的编译
笔者最近在学习周志明老师编写的<深入理解Java虚拟机>一书,书中第一章的实战部分就是"自己编译JDK",不过书中提到的是OpenJDK 7的编译.由于现在Java开发 ...
- 最全最详细:ubuntu16.04下内核编译以及设备驱动程序的编写(针对新手而写)
写在前面:本博客为本人原创,转载请注明出处!同时,本博客严禁任何下载站随意抓取!!! 本博客唯一合法URL: 总体考虑 要去写设备驱动程序,说白了就三大步骤:下载内核源码构建内核源码树(也就是下载你的 ...
- Ubuntu16.04下安装MATLAB 2016b!完美运行
目录 1.下载MATLAB 2016b 2.挂载iso 3.安装MATLAB 4.破解 5.快捷键与运行 1.下载MATLAB 2016b 下载matlab 2016b for linux(可以百度搜 ...
- ubuntu16.04下python2、python3环境选择与python升级(pip版本切换)
参考链接:https://www.jianshu.com/p/63c1f22e1fed Ubuntu中python版本问题: 添加PPA: sudo add-apt-repository ppa:jo ...
随机推荐
- iOS 之 工厂模式
参考:http://www.jikexueyuan.com/course/2054_2.html?ss=2 1. 简单工厂 简单工厂类是一个实体类.用于几种相似类的统一创建,简化流程,隔离细节. 下面 ...
- CentOS 7 部署、连接 数据库mariadb
1.安装mariadb yum -y install mariadb* 2.开启/停止 systemctl start mariadb #启动MariaDB systemctl stop maria ...
- EF Code First:实体映射
二.实体映射 实体与数据库的映射可以通过DataAnnotation与FluentAPI两种方式来进行映射: (一) DataAnnotation DataAnnotation 特性由.NET 3.5 ...
- 日历视图(CalendarView)组件的功能和用法
日历视图(CalendarView)可用于显示和选择日期,用户既可选择一个日期,也可通过触摸来滚动日历.如果希望监控该组件的日历改变,可调用CalendarView的setOnDateChangeLi ...
- Cocoa 新的依赖管理工具:Carthage
昨天搞了一下pod的安装 因为之前我都是在使用pod来进行第三方库的管理 但是拿到项目之后 竟发现这个前辈是用Carthage 说真的在这之前我从来没有用过这个玩意因为我感觉用POD已经很好了啊 很方 ...
- CSS3-----图片翻页效果的展示
在开发一个网站的过程中各种翻页效果数不胜数,在这里我将介绍一下简单的一种方法就是使用css3的旋转即可实现这种常见的效果: 显示效果如下: 首先是页面的布局,不用那么复杂; a标签的href属性,一般 ...
- loadrunner:关联操作
文章以实例讲解loadrunner中的关联操作,内容包括:自动关联.手动关联和关联规则的设置. 1.1.1 准备工作 在web tours项目默认设置里,登录操作是没有生成sessionID的 ...
- ubuntu和Deepin下chrome浏览器提示flash下载失败或者过期的解决方案
问题:更新了下Deepin系统,打开chrome发现,视频放不了了,提示flash"下载失败" 谷歌浏览器版本是Version 55.0.2883.87 (64-bit) flas ...
- Javaweb阶段知识回顾一
java基础增强 一.jdk1.5的新特性 自动封箱拆箱 封箱:Java自动将原始类型值转换成对应的对象,如将int的变量转换成Integer对象 拆箱:自动将对应的对象转换成原始类型值,将Integ ...
- Spark工作机制简述
Spark工作机制 主要模块 调度与任务分配 I/O模块 通信控制模块 容错模块 Shuffle模块 调度层次 应用 作业 Stage Task 调度算法 FIFO FAIR(公平调度) Spark应 ...