周平文库
当前位置:首页 » Caffe-深度学习框架上手教程 » 正文

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

2018-05-16 10:49:55

caffe 深度学习框架上手教程
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 架构