Ubuntu18 Win10搭建Caffe训练识别mnist手写数字demo

ubuntu 系统下的Caffe环境搭建

对于caffe的系统一般使用linux系统,当然也有windows版本的caffe,不过如果你一开始使用了windows下面的caffe,后面学习的过程中,会经常遇到各种错误,网上下载的一些源码、模型也往往不能快速的跑起来,因为貌似caffe的官方只提供了linux版本,而且caffe在不断的快速迭代更新中,如果不使用原版的话,后面编译出现什么问题,自己怎么错的,自己都不知道。本篇博文主要讲解快速搭建caffe环境:

电脑系统:ubuntu 14.04

显卡:GTX 850

在ubuntu下要完整的搭建caffe,个人感觉最难的一步就是cuda的安装了,特别是对于双显卡的电脑来说,很容易黑屏、无法登陆图形界面,这个我安装了n久,都没装成功,因为我的电脑笔记本双显卡,每次装完cuda就黑屏,网上的教程一大堆,但都中看不中用,导致我重装了二三十次的系统,最后才成功。这里为了讲caffe的安装,我们先不使用GPU,进行安装测试,因为没有GPU我们依旧可以跑caffe,只是速度比较慢而已。

1、安装caffe所需要的依赖库

命令:

sudo apt-get install libatlas-base-dev
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler

这些库要安装挺久的,请耐心等待。

2、下载caffe。

到github上下载caffe:https://github.com/BVLC/caffe。下载完成后,解压caffe源码包。解压后,我们打开文件,可以看到caffe的源码包如下:

3、配置Make.config 文件。caffe文件解压后,文件夹下面有一个Makefile.config.example文件,我们需要对这个文件进行重命名为:Make.config  。也就是去掉后缀example。然后我们打开这个文件,可以看到如下内容:

然后我们把:#CPU_ONLY:=1,那一行的注释符号去掉:CPU_ONLY:=1。这是因为我们没有安装CUDA,还不能使用gpu,所以我们把配置改为只使用cpu。

4、编译caffe。

方案一:

(1)在完成Make.config配置后,我们输入命令:

make all

进行caffe源码编译.这一步有可能遇到如下错误:

caffe/proto/caffe.pb.h: No such file or directory

如果出现这个错误,那么输入命令:

protoc src/caffe/proto/caffe.proto --cpp_out=.
mkdir include/caffe/proto
mv src/caffe/proto/caffe.pb.h include/caffe/proto

然后在进行make all 就可以了

(2)编译完成后,在安装python接口,输入命令:

make pycaffe

这个如果不使用python接口,调用caffe模型的话也可以不用安装,不过建议还是搞一下,就一句话的事。完事后,我们会发现caffe源码目录下,多了一个build文件,这个文件下面有个tools,打开这个文件夹:

这个文件夹下面的工具可是个好东西啊,以后我们会经常用到这些可执行文件,最常用的就是可执行文件:caffe,我们只要调用这个工具,就可以进行训练。

(3)接着编译test文件夹下面的源码。命令如下:

make test
make runtest

采用这种方案一般没问题,不过我在使用c++调用的时候,会使用到链接库:libcaffe.so.1.0.0-rc3,这种方法编译后没有生成这个文件;经过google查找,发现采用cmake编译,才会生成libcaffe.so文件

方案二:直接采用cmake:

mkdir build
cd build
cmake ..
make all -j8

5、测试阶段

安装完了,自然要测试一下能不能用咯。首先cd到caffe目录,然后输入命令:

sh data/mnist/get_mnist.sh
sh examples/mnist/create_mnist.sh
vim examples/mnist/lenet_solver.prototxt

把lenet_solver.prototxt里面的solver_mode 改为 CPU。因为我们还没装GPU,暂时只使用CPU就好了。

然后我们运行脚本:

./examples/mnist/train_lenet.sh

这个时候,如果成功的话,就会开始跑起来:

说明:如果在使用caffe、或者编译安装caffe过程中,出现如下错误:

CXX/LD -o .build_release/tools/convert_imageset.bin
.build_release/lib/libcaffe.so: undefined reference tocv::imread(cv::String const&, int)'.build_release/lib/libcaffe.so: undefined reference tocv::imencode(cv::String const&, cv::_InputArray const&, std::vector >&, std::vector > const&)'

那么请修改上面的Makefile文件(不是Makefile.config):

LIBRARIES += glog gflags protobuf leveldb snappy \
lmdb boost_system hdf5_hl hdf5 m \
opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs

也就是在libraries后面,加上opencv的相关库文件。

接着就开始caffe搞起吧,推荐个caffe模型网站:https://github.com/BVLC/caffe/wiki/Model-Zoo。本来个人不是很喜欢caffe的,就是因为这个网站吸引了我,这个网站可以搞到好多caffe模型、源码,非常适合于我们学习。

二、在Eclipse中使用编译调试caffe

1、首先就是安装Eclipse,然后安装c++开发插件,这个可以百度搜一下,eclipse下面怎么进行c++开发。

2.导入caffe makefile工程到eclipse (由于是英文版,下面描述也用英文,省的翻译,方便大家调试)
(1)File→New→Project→C/C++ →Makefile Project with Existing Code.
(2)Create a new Makefile Project from existing code
Projectname: caffe-master
Existing code location:/home/user/caffe-workspace/caffe-master
Language: choose C and C++
Toolchain:choose Linux GCC
(3)Then click on caffe-master in Project Explorer (set Window→Open  Perspective → C/C++).

(4)Now go File → Properties → Run/Debug settings.Click  New.., and choose C/C++ application
(5)Fill launch configurationproperties
·        Arguments:
fill   train –solver=examples/mnist/lenet_solver.prototxt
and change working directory from default to /home/user/caffe-workspace/caffe-master(change to your own directory)

(6)Now you can use debug caffe code: Run-> Debug

三、C++函数调用相关路径,makefile

CC=g++CXXFLAGS = -O2 -Wall -D__STDC_CONSTANT_MACROS INCLUDE = -I/usr/local/cuda/include -I. -I/usr/local/cuda/include -I/home/hjimce/caffe/include/ -I/home/hjimce/caffe/src/LIBRARY = -L/usr/local/x86_64-linux-gnu/ -lprotobuf \-L/usr/lib/x86_64-linux-gnu/ -lglog \-L/usr/local/cuda/lib64/ -lcudart -lcublas -lcurand \-L/usr/local/lib/ -lm -lpthread -lavutil -lavformat -lavcodec -lswscale -lopencv_core -lopencv_imgproc -lopencv_highgui \-L/usr/lib/python2.7/config-x86_64-linux-gnu/ -lpython2.7 \-L/sur/lib32/ -lrt \-L../../caffe/build/lib/ -lcaffeall:$(CC) $(INCLUDE) $(OBJS) testcpp.cpp -o exercise $(LIBRARY)

windows下的caffe环境搭建

最近在ubuntu搞了一个月的caffe,总感觉很不爽,因为ubuntn下面的c++集成开发工具,eclipse用起来没有vs爽,因为对caffe的函数名不是很熟悉,所以需要借助vs的c++助手。然后前一个月大部分也是调用pycaffe,但是最近感觉需要对caffe的c++函数比较熟悉,才能把自己的能力进一步提高,于是就开始搞起了windows 下的caffe,借助vs的强大功能,快速学习caffe。一开始采用vs2012,最后各种错误,最后改成vs2013很容易就编译成功了。

一、安装编译环境

1、    Visual studio2013

       这个比较简单,不写步骤了。

2、python 2.7.6

       为了能使用python调用Caffe,首先需要安装python,这个也简单,问度娘很多。注意两点:

①安装的时候记得勾选pip,这个工具很nice,可以为你省很多不必要的麻烦;

②安装完后设置好环境变量。可以再cmd命令中输入python检查,如果不报错,则恭喜。

       接下来利用pip工具安装这几个包:numpy、scipy、matplotlib、scikit-image、protobuf

在cmd命令行内输入:pip install numpy即可,其他几个类似。

3、matalb

        这个安装过程比较慢,也没什么需要注意的,这里直接略去。

二、安装caffe

1、caffe源码包

下载地址:https://github.com/Microsoft/caffe

2、编译配置

      将下载的caffe-windows.zip进行解压,并进入其根目录下的windows目录,把这个CommonSettings.props.example文件复制到源目录一份,然后重命名为CommonSettings.props。打开并修改其中的配置项。有几个需要注意的地方:

①是否只是用cpu。如果你的电脑显卡支持GPU编程(是否支持可以去英伟达官网查询),那么可以配置为false。否则CpuOnlyBuild = true

②是否使用cudnn加速 

③是否使用python和matalb,根据需要配置

④如果配置了python和matlab,这里需要把修改软件目录为自己电脑上的实际安装目录

⑤如果有cuda,则把CudaVersion修改为自己电脑的cuda版本

3、项目编译

        用Visual studio2013打开caffe-master\windows下的Caffe.sln文件,进去后如下图(共16个项目):

(1)先生成【libcaffe】,右键生成;这里由于别的模块用到了libcaffe,所以,首先生成libcaffe

(2)再选择【解决方案Caffe】进行生成,这里时间比较久,因为Nuget会提示下载一些东西,包括boost,opencv2.4.10,gflags,glog,hdf5,lmdb,LevelDB,OpenBLAS,protobuf等预编译的依赖包。过程有点慢,多等会就ok。下载完成后会在caffe 的同级目录生成NugetPackages的文件。

    如果中途编译失败,出现错误,不用紧张,双击出现如下对话框,确定然后保存,重新编译即可。

4、运行

        右

同时在Build\x64\下生成了很多exe和dll文件。这些工具在后面训练网络、测试时候很有用。

三、体验深度学习

     终于到这了,我们通过一个caffe自带的简单例子来体验一下caffe的网络训练和预测。  

     deep-learning属于有监督学习的一种,一般步骤分为:准备数据、训练模型和测试模型。我们下边也通过这三步来测试一个基于LeNet网络的学习模型。

1、准备训练数据

mnist数据集下载地址:http://yann.lecun.com/exdb/mnist/

下载后解压到caffe-master目录中的\data\mnist内。分别在cmd下输入以下命令

.\Build\x64\Release\convert_mnist_data.exe .\data\mnist\mnist_train_lmdb\train-images.idx3-ubyte .\data\mnist\mnist_train_lmdb\train-labels.idx1-ubyte .\examples\mnist\mnist_train_lmdb

.\Build\x64\Release\convert_mnist_data.exe .\data\mnist\mnist_test_lmdb\t10k-images.idx3-ubyte   .\data\mnist\mnist_test_lmdb\t10k-labels.idx1-ubyte .\examples\mnist\mnist_test_lmdb

将数据转化为caffe需要的输入格式。

2、训练模型

①修改模型参数

修改examples\mnist\lenet_solver.prototxt,将最后一行改为solver_mode:CPU,

修改examples\mnist\lenet_train_test.prototxt,如下所示,左面为原始的,右面为修改后的。

②训练模型,训练完毕后会得到相应的准确率和损失率。

.\Build\x64\Release\caffe.exe train --solver=.\examples\mnist\lenet_solver.prototxt

3、测试模型

      最终训练的模型全职文件保存在example\minst\lenet_iter_10000.caffemodel文件中,训练状态保存在example\minst\lenet_iter_10000.solverstate中。这两个文件都是PrototxtBuffer二进制格式。

      利用训练好的模型权值文件可以测试数据集。运行如下命令:

.\Build\x64\Release\caffe.exe test -model examples\mnist\lenet_train_test.prototxt -weights examples\mnist\lenet_iter_10000.caffemodel -iterations 100

到这,整个caffe在windows上就安装完成了。下一节写Ubuntu下caffe的配置。

谢谢!

任何程序错误,以及技术疑问或需要解答的,请添加

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/546750.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows server 2008 IE代理服务器实验

一、首先介绍IE代理服务器的好处如下:1、节省带宽 2、绕过防火墙二、下面以这个软件为代理软件,本人在物理机和虚拟机实验,1、首先在物理机安装代理软件,安装完成如图所示:2、在“设置”项代理协议端口、在本地局域网…

Java 200+ 面试题补充③ Dubbo 模块

昨天在我的 Java 面试粉丝群里,有一个只有一年开发经验的小伙伴只用了三天时间,就找到了一个年薪 20 万的工作,真是替他感到开心。 他的经历告诉我们:除了加强自我实战经验之外,还要努力积累自己的理论知识。 人生没有…

十一、PyQt5点击主窗口弹出另一个非模态子窗口

单击主对话框菜单“设置“下的”交换机配置”action的信号与槽 主对话框代码: # -*- coding: utf-8 -*-import sys from PyQt5 import QtCore from PyQt5.QtWidgets import QApplication, QMainWindow, QDialog, QDesktopWidget import win32api import win32con

彻底搞懂 Java 中的注解 Annotation

Java注解是一系列元数据,它提供数据用来解释程序代码,但是注解并非是所解释的代码本身的一部分。注解对于代码的运行效果没有直接影响。网络上对注解的解释过于严肃、刻板,这并不是我喜欢的风格。尽管这样的解释听起来非常的专业。为了缓解大…

cs时间校准

2019独角兽企业重金招聘Python工程师标准>>> c/s结构中的时间校准 拜读了风云的一篇博客 思路比较明显简单: C发包打时间戳 S收包打时间戳 S回应包打时间戳 C收包打时间戳 4个时间戳可以进行计算校准. 假设来回时间相等 转载于:https://my.oschina.net/u/1449566/bl…

使用ACME部署生成阿里云免费HTTPS证书

使用ACME部署HTTPS证书 背景 现在越来越多的服务都是基于web,大多数默认使用HTTP协议。HTTP协议是一种没有加密的协议,所有数据都通过明文传输,即便是只在内网使用也存在一定的安全风险。尤其是对于登录等操作,账号密码通过HTTP…

Java性能优化的50个细节(珍藏版)

来源:http://t.cn/EMze6kc在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身。养成良好的编码习惯非常重要,能够显著地提升程序性能。1. 尽量在合适的场合使用单例使用单例可以减轻加载的负担,缩短加载…

强化学习基础篇 OpenAI Gym 环境搭建demo

1. Gym介绍 Gym是一个研究和开发强化学习相关算法的仿真平台,无需智能体先验知识,由以下两部分组成 Gym开源库:测试问题的集合。当你测试强化学习的时候,测试问题就是环境,比如机器人玩游戏,环境的集合就…

九、PyQt5 QLineEdit输入的子网字符串校验QRegExp

自己编写的用于对lineEdit编辑框输入的子网,例如:192.168.60.1/24字符串校验是否合规。 # 限制lineEdit编辑框只能输入./字符和数字reg = QRegExp([0-9./]+$)validator = QRegExpValidator(self)validator.setRegExp(reg)self.lineEditSubNet.setValidator(validator)

为什么阿里巴巴不建议在for循环中使用+进行字符串拼接

本文,也是对于Java中字符串相关知识的一个补充,主要来介绍一下字符串拼接相关的知识。本文基于jdk1.8.0_181。字符串拼接字符串拼接是我们在Java代码中比较经常要做的事情,就是把多个字符串拼接到一起。我们都知道,String是Java中…

Google强化学习框架SEED RL环境部署

如上述博客有任何错误或者疑问,请加VX:1755337994,及时告知!万分感激! 本框架是Google发布于ICLR2020顶会上,这两天发布于Google Blog上 **论文Arxiv:**https://arxiv.org/abs/1910.06591 ||…

PLSQL连接oracel数据库_用户无法登陆_oci.dll_配置问题

为什么80%的码农都做不了架构师?>>> 由于工作需要换了台新电脑,在抚摸新笔记本满怀新鲜感和喜悦心情之余(其实纯屌丝味尽显无余,就基本和双手捧托一颗高大上的茶叶蛋般内心激动且泪眼汪汪),重新…

CentOS7搭建部署Ambari 2.6.2.0最新版(HDP-UTILS、HDP-GPL)大数据平台

如上述博客有任何错误或者疑问,请加VX:1755337994,及时告知!万分感激! 注:本文基于root用户操作 一、安装环境准备 操作系统 centos7.5 hdc-data1:192.168.163.51 hdc-data2:192.16…

阿里面试题BIO和NIO数量问题附答案和代码

一、问题 BIO 和 NIO 作为 Server 端,当建立了 10 个连接时,分别产生多少个线程? 答案: 因为传统的 IO 也就是 BIO 是同步线程堵塞的,所以每个连接都要分配一个专用线程来处理请求,这样 10 个连接就会创建…

CentOS7搭建离线部署Cloudera CDH 6.2.0大数据平台

如上述博客有任何错误或者疑问,请加VX:1755337994,及时告知!万分感激! 1.概述 CDH,全称Clouderas Distribution, including Apache Hadoop。是Hadoop众多分支中对应中的一种,由Cloudera维护&a…

负载均衡实现的几种方式

负载均衡,英文名Load Balance,作用是将操作分摊到多个执行单元上执行。随着如今网络流量的不断增大,服务的负载均衡是必须的,这里就来讲一讲负载均衡的结构。 说到负载均衡,同学最容易想到的可能就是nginx了&…

CheckBox as Image use button

为什么80%的码农都做不了架构师&#xff1f;>>> <CheckBox android:id"id/notificationPhoneIcon" android:layout_width"wrap_content" android:layout_height"wrap_content" android:layout_centerVertical"true" an…

1-1.Win10系统利用Pycharm社区版安装Django搭建一个简单Python Web项目的步骤之一

首先&#xff0c;安装python3.8和pycharm参考其他教程。 一、安装django 使用下面命令默认安装最新版的django pip install django也可以从django官网查看安装一个LTS长期稳定支持版本&#xff0c;从下图看到3.2是LTS版本&#xff0c;能够长期支持2021年&#xff5e;2024年&…

python装饰器函数传参

python装饰器函数传参 装饰器 装饰器是一个返回函数的高阶函数。 装饰器常见用法&#xff1a; 打印日志 def logger(func):def wrapper(*args, **kw):print do {}.format(func.__name__)func(*args, **kw)print finishreturn wrapperlogger def add(x,y):print {} {} {}.…

Tomcat工作原理及简单模拟实现

Tomcat应该都不陌生&#xff0c;我们经常会把写好的代码打包放在Tomcat里并启动&#xff0c;然后在浏览器里就能愉快的调用我们写的代码来实现相应的功能了&#xff0c;那么Tomcat是如何工作的&#xff1f;一、Tomcat工作原理我们启动Tomcat时双击的startup.bat文件的主要作用是…