Caffe是一个清晰而高效的深度学习框架,其作者是博士毕业于UC Berkeley的 贾扬清,目前在Google工作。 Caffe是纯粹的C++/CUDA架构,支持命令行、Python和MATLAB接口;可以在CPU和GPU直接无缝切换:
Caffe::set_mode(Caffe::GPU);
Caffe中的网络都是有向无环图的集合,可以直接定义:
name: "dummy-net" layers {<span><span>name: <span>"data" …</span></span></span>} layers {<span><span>name: <span>"conv" …</span></span></span>} layers {<span><span>name: <span>"pool" …</span></span></span>} layers {<span><span>name: <span>"loss" …</span></span></span>}
Caffe层的定义由2部分组成:层属性与层参数,例如
name:"conv1" type:CONVOLUTION bottom:"data" top:"conv1" convolution_param{ num_output:<span>20 kernel_size:5 stride:1 weight_filler{ type: "<span style="color: #c0504d;">xavier</span>" } }
这段配置文件的前4行是层属性,定义了层名称、层类型以及层连接结构(输入blob和输出blob);而后半部分是各种层参数。
Blob
Blob是用以存储数据的4维数组,例如
网络参数的定义也非常方便,可以随意设置相应参数。
甚至调用GPU运算只需要写一句话:
solver_mode:GPU
Caffe的安装与配置
Caffe需要预先安装一些依赖项,首先是CUDA驱动。不论是CentOS还是Ubuntu都预装了开源的nouveau显卡驱动(SUSE没有这种问题),如果不禁用,则CUDA驱动不能正确安装。以Ubuntu为例,介绍一下这里的处理方法,当然也有其他处理方法。
生成mnist-train-leveldb/ 和 mnist-test-leveldb/,把数据转化成leveldb格式:
训练网络:
# sudo vi/etc/modprobe.d/blacklist.conf # 增加一行 :blacklist nouveau sudoapt-get --purge remove xserver-xorg-video-nouveau #把官方驱动彻底卸载: sudoapt-get --purge remove nvidia-* #清除之前安装的任何NVIDIA驱动 sudo service lightdm stop #进命令行,关闭Xserver sudo kill all Xorg
安装了CUDA之后,依次按照Caffe官网安装指南安装BLAS、OpenCV、Boost即可。
在Caffe安装目录之下,首先获得MNIST数据集:
cd data/mnist sh get_mnist.sh
生成mnist-train-leveldb/ 和 mnist-test-leveldb/,把数据转化成leveldb格式:
cd examples/lenet sh create_mnist.sh
训练网络:
sh train_lenet.sh
不论使用何种框架进行CNNs训练,共有3种数据集:
Protocol Buffer是一种类似于XML的用于序列化数据的自动机制。
首先在Protocol Buffers的中下载最新版本:
https://developers.google.com/protocol-buffers/docs/downloads
解压后运行:
./configure $ make $ make check $ make install pip installprotobuf
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
name: "dummy-net" layers {<span><span>name: <span>"data" …</span></span></span>} layers {<span><span>name: <span>"conv" …</span></span></span>} layers {<span><span>name: <span>"pool" …</span></span></span>} layers {<span><span>name: <span>"loss" …</span></span></span>}
0
要parse(解析)一个protobuf类型数据,首先要告诉计算机你这个protobuf数据内部是什么格式(有哪些项,这些项各是什么数据类型的决定了占用多少字节,这些项可否重复,重复几次),安装protobuf这个module就可以用protobuf专用的语法来定义这些格式(这个是.proto文件)了,然后用protoc来编译这个.proto文件就可以生成你需要的目标文件。
想要定义自己的.proto文件请阅读:
https://developers.google.com/protocol-buffers/docs/proto?hl=zh-cn
name: "dummy-net" layers {<span><span>name: <span>"data" …</span></span></span>} layers {<span><span>name: <span>"conv" …</span></span></span>} layers {<span><span>name: <span>"pool" …</span></span></span>} layers {<span><span>name: <span>"loss" …</span></span></span>}
1
name: "dummy-net" layers {<span><span>name: <span>"data" …</span></span></span>} layers {<span><span>name: <span>"conv" …</span></span></span>} layers {<span><span>name: <span>"pool" …</span></span></span>} layers {<span><span>name: <span>"loss" …</span></span></span>}
2
Caffe ———–Convolution Architecture For Feature Embedding (Extraction)
为什么要用Caffe?
Caffe 架构
CNN网络配置文件
在imagenet上的图像分类challenge上Alex提出的alexnet网络结构模型赢得了2012届的冠军。要研究CNN类型DL网络模型在图像分类上的应用,就逃不开研究alexnet,这是CNN在图像分类上的经典模型(DL火起来之后)。
在DL开源实现caffe的model样例中,它也给出了alexnet的复现,具体网络配置文件如下 train_val.prototxt
接下来本文将一步步对该网络配置结构中各个层进行详细的解读(训练阶段):
各种layer的operation更多解释可以参考 Caffe Layer Catalogue
从计算该模型的数据流过程中,该模型参数大概5kw+。
conv1阶段DFD(data flow diagram):
conv2阶段DFD(data flow diagram):
conv3阶段DFD(data flow diagram):
conv4阶段DFD(data flow diagram):
conv5阶段DFD(data flow diagram):
fc6阶段DFD(data flow diagram):
fc7阶段DFD(data flow diagram):
fc8阶段DFD(data flow diagram):
caffe的输出中也有包含这块的内容日志,详情如下:
name: "dummy-net" layers {<span><span>name: <span>"data" …</span></span></span>} layers {<span><span>name: <span>"conv" …</span></span></span>} layers {<span><span>name: <span>"pool" …</span></span></span>} layers {<span><span>name: <span>"loss" …</span></span></span>}
3
CIFAR-10在caffe上进行训练与学习
60000张 32X32 彩色图像 10类,50000张训练,10000张测试
在终端运行以下指令:
name: "dummy-net" layers {<span><span>name: <span>"data" …</span></span></span>} layers {<span><span>name: <span>"conv" …</span></span></span>} layers {<span><span>name: <span>"pool" …</span></span></span>} layers {<span><span>name: <span>"loss" …</span></span></span>}
4
其中CAFFE_ROOT是caffe-master在你机子的地址
运行之后,将会在examples中出现数据库文件./cifar10-leveldb和数据库图像均值二进制文件./mean.binaryproto
模型
该CNN由卷积层,POOLing层,非线性变换层,在顶端的局部对比归一化线性分类器组成。该模型的定义在CAFFE_ROOT/examples/cifar10 directory’s cifar10_quick_train.prototxt中,可以进行修改。其实后缀为prototxt很多都是用来修改配置的。
训练这个模型非常简单,当我们写好参数设置的文件cifar10_quick_solver.prototxt和定义的文件cifar10_quick_train.prototxt和cifar10_quick_test.prototxt后,运行train_quick.sh或者在终端输入下面的命令:
name: "dummy-net" layers {<span><span>name: <span>"data" …</span></span></span>} layers {<span><span>name: <span>"conv" …</span></span></span>} layers {<span><span>name: <span>"pool" …</span></span></span>} layers {<span><span>name: <span>"loss" …</span></span></span>}
5
即可,train_quick.sh是一个简单的脚本,会把执行的信息显示出来,培训的工具是train_net.bin,cifar10_quick_solver.prototxt作为参数。
然后出现类似以下的信息:这是搭建模型的相关信息
name: "dummy-net" layers {<span><span>name: <span>"data" …</span></span></span>} layers {<span><span>name: <span>"conv" …</span></span></span>} layers {<span><span>name: <span>"pool" …</span></span></span>} layers {<span><span>name: <span>"loss" …</span></span></span>}
6
接着:
name: "dummy-net" layers {<span><span>name: <span>"data" …</span></span></span>} layers {<span><span>name: <span>"conv" …</span></span></span>} layers {<span><span>name: <span>"pool" …</span></span></span>} layers {<span><span>name: <span>"loss" …</span></span></span>}
7
之后,训练开始
name: "dummy-net" layers {<span><span>name: <span>"data" …</span></span></span>} layers {<span><span>name: <span>"conv" …</span></span></span>} layers {<span><span>name: <span>"pool" …</span></span></span>} layers {<span><span>name: <span>"loss" …</span></span></span>}
8
其中每100次迭代次数显示一次训练时lr(learningrate),和loss(训练损失函数),每500次测试一次,输出score 0(准确率)和score 1(测试损失函数)
当5000次迭代之后,正确率约为75%,模型的参数存储在二进制protobuf格式在cifar10_quick_iter_5000
然后,这个模型就可以用来运行在新数据上了。
另外,更改cifar*solver.prototxt文件可以使用CPU训练,
name: "dummy-net" layers {<span><span>name: <span>"data" …</span></span></span>} layers {<span><span>name: <span>"conv" …</span></span></span>} layers {<span><span>name: <span>"pool" …</span></span></span>} layers {<span><span>name: <span>"loss" …</span></span></span>}
9
可以看看CPU和GPU训练的差别。
主要资料来源:caffe官网教程
原文链接:Caffe 深度学习框架上手教程 (责编:周建丁)
本网页所有文字内容由 imapbox邮箱云存储,邮箱网盘, iurlBox网页地址收藏管理器 下载并得到。
ImapBox 邮箱网盘 工具地址: https://www.imapbox.com/download/ImapBox.5.5.1_Build20141205_CHS_Bit32.exe
PC6下载站地址:PC6下载站分流下载
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox 网页视频 工具地址: https://www.imapbox.com/download/ImovieBox4.7.0_Build20141115_CHS.exe
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算