Caffe-深度学习框架上手教程

 时间:2018-05-16 03:50:06 贡献者:大科实用文档大全

导读:Caffe深度学习框架上手教程机器学习DeepLearningcaffeCaffe是一个清晰而高效的深度学习框架,其作者是博士毕业于UCBerkeley的贾扬清,目前在Google工作。Caffe是纯粹的C++/CUDA架构,支持命令行、Pytho

caffe 深度学习框架上手教程
caffe 深度学习框架上手教程

Caffe 深度学习框架上手教程 机器学习 Deep Learning caffe Caffe 是一个清晰而高效的深度学习框架,其作者是博士毕业于 UC Berkeley 的 贾扬清,目前在 Google 工作。

Caffe 是纯粹的 C++/CUDA 架构,支持命令行、Python 和 MATLAB 接口;可以 在 CPU 和 GPU 直接无缝切换: Caffe::set_mode(Caffe::GPU); Caffe 的优势 1. 上手快:模型与相应优化都是以文本形式而非代码形式给出。

Caffe 给出了模型的定义、最优化设置以及预训练的权重,方便立即上手。

2. 速度快:能够运行最棒的模型与海量的数据。

Caffe 与 cuDNN 结合使用,测试 AlexNet 模型,在 K40 上处理每张图片只需 要 1.17ms. 3. 模块化:方便扩展到新的任务和设置上。

可以使用 Caffe 提供的各层类型来定义自己的模型。

4. 开放性:公开的代码和参考模型用于再现。

5. 社区好:可以通过 BSD-2 参与开发与讨论。

Caffe 的网络定义 Caffe 中的网络都是有向无环图的集合,可以直接定义: name:"dummy-net" layers {name: "data" …} layers {name: "conv" …} layers {name: "pool" …} layers {name: "loss" …} 数据及其导数以 blobs 的形式在层间流动。

Caffe 的各层定义 Caffe 层的定义由 2 部分组成:层属性与层参数,例如 name:"conv1" type:CONVOLUTION bottom:"data" top:"conv1" convolution_param{ num_output:20 kernel_size:5 stride:1 weight_filler{ type: "xavier" } } 这段配置文件的前 4 行是层属性,定义了层名称、层类型以及层连接结构(输入 blob 和输出 blob);而后半部分是各种层参数。

Blob Blob 是用以存储数据的 4 维数组,例如

对于数据:Number*Channel*Height*Width 对于卷积权重:Output*Input*Height*Width  对于卷积偏置:Output*1*1*1 训练网络 网络参数的定义也非常方便,可以随意设置相应参数。

甚至调用 GPU 运算只需要写一句话: solver_mode:GPU Caffe 的安装与配置 Caffe 需要预先安装一些依赖项, 首先是 CUDA 驱动。

不论是 CentOS 还是 Ubuntu 都预装了开源的 nouveau 显卡驱动 (SUSE 没有这种问题) , 如果不禁用, 则 CUDA 驱动不能正确安装。

以 Ubuntu 为例,介绍一下这里的处理方法,当然也有其他 处理方法。

# 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 试试 在 Caffe 安装目录之下,首先获得 MNIST 数据集: cd data/mnist sh get_mnist.sh 生成 mnist-train-leveldb/ 和 mnist-test-leveldb/,把数据转化成 leveldb 格式: sh examples/mnist/create_mnist.sh 训练网络: sh train_lenet.sh

让 Caffe 生成的数据集能在 Theano 上直接运行 不论使用何种框架进行 CNNs 训练,共有 3 种数据集:  Training Set:用于训练网络  Validation Set:用于训练时测试网络准确率  Test Set:用于测试网络训练完成后的最终正确率 Caffe 生成的数据分为 2 种格式:Lmdb 和 Leveldb 它们都是键/值对(Key/Value Pair)嵌入式数据库管理系统编程库。

虽然 lmdb 的内存消耗是 leveldb 的 1.1 倍, 但是 lmdb 的速度比 leveldb 快 10%至 15%,更重要的是 lmdb 允许多种训练模型同时读取同一组数据集。

因此 lmdb 取代了 leveldb 成为 Caffe 默认的数据集生成格式。

Google Protocol Buffer 的安装 Protocol Buffer 是一种类似于 XML 的用于序列化数据的自动机制。

首先在 Protocol Buffers 的中下载最新版本: https://developers.google.com/protocol-buffers/docs/downloads6 解压后运行: ./configure $ make $ make check $ make install pip installprotobuf 添加动态链接库 export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH Lmdb 的安装 pip install lmdb 要 parse(解析)一个 protobuf 类型数据,首先要告诉计算机你这个 protobuf 数 据内部是什么格式 (有哪些项, 这些项各是什么数据类型的决定了占用多少字节, 这些项可否重复,重复几次),安装 protobuf 这个 module 就可以用 protobuf 专 用的语法来定义这些格式 (这个是.proto 文件) 了, 然后用 protoc 来编译这个.proto 文件就可以生成你需要的目标文件。

想要定义自己的.proto 文件请阅读: https://developers.google.com/protocol-buffers/docs/proto?hl=zh-cn10 编译.proto 文件 protoc--proto_path=IMPORT_PATH --cpp_out=DST_DIR --java_out=DST_DIR--python_out=DST_DIR path/to/file.proto --proto_path 也可以简写成-I 是.proto 所在的路径 输出路径: --cpp_out 要生成 C++可用的头文件, 分别是***.pb.h (包含申明类) ***.pb.cc (包 含可执行类) ,使用的时候只要 include “***.pb.h” --java_out 生成 java 可用的头文件 --python_out 生成 python 可用的头文件, **_pb2.py, 使用的时候 import**_pb2.py 即可 最后一个参数就是你的.proto 文件完整路径。

Caffe (CNN, deep learning) 介绍 Caffe -----------Convolution Architecture For Feature Embedding (Extraction) 1. Caffe 是什么东东? o CNN (Deep Learning) 工具箱 o C++ 语言架构 o CPU 和 GPU 无缝交换 o Python 和 matlab 的封装 o 但是,Decaf 只是 CPU 版本。

2. 为什么要用 Caffe? o 运算速度快。

简单友好的架构用到的一些库: o Google Logging library (Glog): 一个 C++语言的应用级日志记录框架,提 供了 C++风格的流操作和各种助手宏. o lebeldb(数据存储):是一个 google 实现的非常高效的 kv 数据库,单进程 操作。

o CBLAS library(CPU 版本的矩阵操作) o CUBLAS library (GPU 版本的矩阵操作) 3. Caffe 架构

 
 

微信扫一扫 送福利