win10 下 caffe 的第一个测试程序

该部分包括两篇文章

  • win10 下 caffe 的第一个测试程序(附带详细讲解) 主要讲解如何利用 caffe 来训练模型。
  • 如何调用 caffe 训练好的模型对输入图片进行测试 主要介绍利用已经训练好的模型进行预测。

费尽千辛万苦,终于把 caffe 编译好了,可是怎么用了,下面透过 mnist 数据集对 caffe 有一个认识。在 caffe 根目录下 (./examplse/mnist) 有一个 mnist 文件夹,在这个文件夹中有个 readme.md,这个markdown文件就是这个测试例子的帮助文档,里面有很清楚的记录, 本文主要就是基于这个文档进行整理的。

caffe(Convolution Architecture For Feature Extraction) 是一种常用的深度学习框架,主要应用在视频、图像处理方面的应用上。另外 caffe 也提供了很多开源模型,具体可以到Model Zoo 上去查看, 这里不多作介绍。

1. 数据

1.1 caffe 支持的数据库格式

caffe 支持 leveldb,lmdb,image filelist 和 hdf5 等格式的数据库。其中leveldb是最早支持的,所以早期用的比较多,(相同数据集)lmdb 的文件 size 比 leveldb 大,但是速度更快,且允许多种训练模型同时读取同一数据集,所以现在应用的比较多。lmdb 常用于单标签数据,像分类等, 而hdf5可用于多标签数据,比如回归等问题。

其实caffe提供了相应的工具(例如/build/tools/Release/convert_imageset.exe)来制作lmdb或leveldb的数据集。

1.2 mnist 数据集

MNIST 数据集可在 http://yann.lecun.com/exdb/mnist/ 获取, 它包含了四个部分:每张图都已经进行尺寸归一化,数字居中处理,固定尺寸为 28×28。

  • Training set images: train-images-idx3-ubyte.gz (9.45MB, 包含60,000个样本)
  • Training set labels: train-labels-idx1-ubyte.gz (28.2KB, 包含60,000个标签)
  • Test set images: t10k-images-idx3-ubyte.gz (1.57MB, 包含10,000个样本)
  • Test set labels: t10k-labels-idx1-ubyte.gz (4.43KB, 包含10,000个标签)

关于 mnist 数据集的介绍这里就不在赘述了。需要注意的是从官方网站上下载得到的文件是二进制数据。帮助文件上说运行对应脚本就可以下载并转换数据格式为 lmdb。 但是我发现我的 mnist 文件夹下没有 get_mnist.ps1 这个文件。所以直接在网上下载了已经转换好格式的文件(mnist_test_leveldb 和 mnist_train_leveldb), 下载之后解压放在 mnist 文件夹下。

cd $CAFFE_ROOT
@ get data from internet
./data/mnist/get_mnist.ps1
@ convert data type to lmdb
./examples/mnist/create_mnist.ps1

2. 网络模型

LeNet-5 就是在数字识别的准确率上有了大幅提升而一炮走红,如下是 LeNet-5 的网络结构。但是 caffe 这个 mnist 例子中不是原封不动用的 lenet-5. 而是稍稍进行了改变。比如将sigmoid 激活函数(在 F6 层之后,下图并没有标明激活函数的位置)变为了 Rectified Linear Unit (ReLU) 激活函数。

3. caffe 实现

3.1 caffe 的基本结构

  • Blob
    主要用于存储(也可以说是传递)数据,包括正向的原始数据data和反向的梯度信息diffs。

  • layer
    Layer是Caffe的基本计算和转换单元。layer 的 输入为 bottom blob(s), 输出为 top blob(s)。常见的 layer 比如 Vision Layer, Loss Layers, Activation/Neuron Layer, Data Layer,Common Layers。更多可以参考拓展资料 。

  • net
    Net 由多个 layer 组成,是一个有向无环图(DAG)。Caffe 运行时记录每层的数据,并且确保前向(Forward)和后向(Backward)的正确性。 下图就是一个 net 示例。

  • Solver
    求解器, 比如利用反向传播来训练模型。

3.2 Protocol Buffers

开始看具体的代码之前, 我们需要先了解 Protocol Buffers。 因为 caffe 中就是用 proto 文件来定义网络结构的。
Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。更多内容请参考拓展资料1 和 拓展资料2。

3.3 MNIST Network

mnist network (稍作修改的 Lenet5 ) 定义在 $CAFFE_ROOT/examples/mnist/lenet_train_test.prototxt 中。下面从中截取的片段。如果想知道没句代码的含义可以参考caffe demo1 & caffe demo2。 这里需要注意,下面data layer 中的 source 表示的是 data 的位置,需要和实际 data 的位置保持一致。而 backend 需要和实际 data 的类型保持一致(leveldb 或者 lmdb)

name: "LeNet"
layer {name: "mnist"type: "Data"top: "data"top: "label"include {phase: TRAIN}transform_param {scale: 0.00390625}data_param {source: "examples/mnist/mnist-train-leveldb"batch_size: 64backend: LEVELDB}
}
layer {name: "mnist"type: "Data"top: "data"top: "label"include {phase: TEST}transform_param {scale: 0.00390625}data_param {source: "examples/mnist/mnist-test-leveldb"batch_size: 100backend: LEVELDB}
}
...

借助可视化工具(比如 Netscope ),可以方便的以图形化的方式查看 net 的结构。下图是上面定义的 LeNet。

3.4 MNIST Solver

mnist solver 定义在 $CAFFE_ROOT/examples/mnist/lenet_solver.prototxt 之下,并且有比较详细的注释。只是你需要根据你的情况选择 CPU 还是 GPU 模式。

# The train/test net protocol buffer definition
net: "examples/mnist/lenet_train_test.prototxt"
# test_iter specifies how many forward passes the test should carry out.
# In the case of MNIST, we have test batch size 100 and 100 test iterations,
# covering the full 10,000 testing images.
test_iter: 100
# Carry out testing every 500 training iterations.
test_interval: 500
# The base learning rate, momentum and the weight decay of the network.
base_lr: 0.01
momentum: 0.9
weight_decay: 0.0005
# The learning rate policy
lr_policy: "inv"
gamma: 0.0001
power: 0.75
# Display every 100 iterations
display: 100
# The maximum number of iterations
max_iter: 10000
# snapshot intermediate results
snapshot: 5000
snapshot_prefix: "examples/mnist/lenet"
# solver mode: CPU or GPU
solver_mode: GPU

4. 训练并测试模型

如果在 Linux 系统下可以直接执行以下代码即可以开始。

cd $CAFFE_ROOT
./examples/mnist/train_lenet.sh

在 windows 下可以 自己写一个 batch 文件, 比如 在根目录下创建一个 mytest.bat。内容如下。

build\\tools\\Release\\caffe.exe train --solver=examples\\mnist\\lenet_solver.prototxt
pause

直接双击 batch 文件运行或者在 cmd 窗口运行都可以。下面是运行的结果。可以看到最后测试的精度为99.13%。

C:\Projects\caffe>build\\tools\\Release\\caffe.exe train --solver=examples\\mnist\\lenet_solver.prototxt
I0525 23:41:23.323810 45304 caffe.cpp:219] Using GPUs 0
I0525 23:41:23.451669 45304 caffe.cpp:224] GPU 0: GeForce GTX 1070
I0525 23:41:23.738215 45304 common.cpp:36] System entropy source not available, using fallback algorithm to generate seed instead.
I0525 23:41:23.756167 45304 solver.cpp:44] Initializing solver from parameters:
test_iter: 100
test_interval: 500
base_lr: 0.01
display: 100
max_iter: 10000
lr_policy: "inv"
gamma: 0.0001
power: 0.75
momentum: 0.9
weight_decay: 0.0005
snapshot: 5000
snapshot_prefix: "examples/mnist/lenet"
solver_mode: GPU
device_id: 0
net: "examples/mnist/lenet_train_test.prototxt"
train_state {level: 0stage: ""
}...I0525 23:42:39.029999 45304 solver.cpp:310] Iteration 10000, loss = 0.002468
I0525 23:42:39.029999 45304 solver.cpp:330] Iteration 10000, Testing net (#0)
I0525 23:42:39.136711 45032 data_layer.cpp:73] Restarting data prefetching from start.
I0525 23:42:39.140700 45304 solver.cpp:397]     Test net output #0: accuracy = 0.9913
I0525 23:42:39.141697 45304 solver.cpp:397]     Test net output #1: loss = 0.030124 (* 1 = 0.030124 loss)
I0525 23:42:39.141697 45304 solver.cpp:315] Optimization Done.
I0525 23:42:39.141697 45304 caffe.cpp:260] Optimization Done.

如果你够细心,可能会在 cmd 窗口看到“System entropy source not available, using fallback algorithm to generate seed instead.”,实际上这个并不是错误,也不会对结果有什么影响。在 Linux 下可以通过 entropy source 更高效的生成随机数, 但是在windows 通过 fallback algorithm 获取随机数。

win10 下 caffe 的第一个测试程序(附带详细讲解)相关推荐

  1. win10下caffe环境搭建: win10 + vs2013 + caffe + CUDA 7.5 + cudnn v4 + Anaconda2 (python 2.7) 目前未使用GPU

    win10下caffe环境搭建: win10 + vs2013 + caffe + CUDA 7.5 + cudnn v4 + Anaconda2 (python 2.7)   目前未使用GPU 最近 ...

  2. win10下安装tensorflow-gpu==1.11.0的详细教程

    20200313 更新 当前配置,用了3个月了,运行良好 系统:win10 显卡:Nvidia 1080Ti python:3.6.8 CUDA:9.0.176 cuDNN:7.0.5 tensorf ...

  3. 【Markdown】 实现上角标和下角标的两种方法(详细讲解!!!)

    作者:MiTu_-_ 本帖内容著作权归作者所有,转载请务必保留本文链接 Markdown实现上下角标的两种方法 第一种 使用Markdown自带的代码格式: 下标: ~ (内容) ~ 例:H2O H~ ...

  4. python计算GPA,附带详细讲解

    这里采用标准计算公式 S:学科分数 P:学科绩点 n:学科数目 下面举个例子,比如: 数学:90 (绩点4); 语文: 80 (绩点3); 英语: 70 (绩点2); GPA=[(90 * 4+80 ...

  5. win10下安装多个cuda(cuda9.0和10.0),并自由切换版本

    1.前言 最近想测试下cuda版本的高地是否会影响GPU显存的初始占用,如果低版本的cuda占用显存较少那岂不是非常棒?所以这就牵涉到了多版本cuda共存的问题,网上很多博客只是浅谈了安装过程,我这里 ...

  6. win10下JDK环境变量配置与IDEA开发工具清晰简洁步骤,迈出Java学习第一步

    文章目录 一.JDK下载 二.win10下环境变量配置 三.开发工具IDEA安装 一.JDK下载 可以直接去官网下载,推荐下载JDK8.0版本 也可以这个网盘里面找一下下载:Windows下JDK8. ...

  7. Win10 下 ProtoBuf 安装编译以及在 C++ 中的用法

    ProtoBuf Protocol Buffer ( protoBuf 或 PB )是 google 的一种数据交换的格式,它独立于语言,独立于平台. google 提供了多种语言的实现:java.c ...

  8. 不是变量 win10_在win10下安装manim

    manim是制作简单动画的一个python库,具体介绍请参考 3b1b/manim​github.com 例如 https://www.zhihu.com/video/1214239758492442 ...

  9. win10下gnuplot的安装

    win10下gnuplot的安装 gnuplot介绍 Gnuplot是一个命令行的交互式绘图工具(command-driven interactive function plotting progra ...

最新文章

  1. 严苛模式 strictmode
  2. 安卓系统底层C语言算法之测试参数是几个long型的算法
  3. matlab eeg信号处理,EEG数据信号的Matlab滤波仿真设计分析研究
  4. ThinkPHP3.2 G函数代码及 使用方法
  5. goland idea设置代码自动换行
  6. open live writer
  7. jdk7与jdk8环境共存与切换
  8. Linux C高级编程——文件操作之库函数
  9. php强制cookies,php Cookies操作类(附源码)
  10. spark-08-SparkStraming简介与kafka0.8集群安装
  11. 金九银十BAT互联网企业涨薪必备知识点:Jvm性能调优实战
  12. 打破信息茧房-我主动获取信息的方法 -#3
  13. python爬取酷狗音乐top500_Python爬取酷狗音乐TOP500榜单
  14. CheckboxPreference 改造
  15. code==200是什么意思
  16. 多自由度机械臂运动学正-逆解|空间轨迹规划控制|MATLAB仿真+实际机器调试
  17. Linux CentOs7 ping网址 未知的名称或服务
  18. 第二章:如何撰写学术论文(文科)
  19. STM32 串口下载hex 串口下载程序 CH340串口
  20. Win2003系统安装SQL Sever2000后1433端口未开放的解释

热门文章

  1. GIT 报错:Branch ‘master‘ set up to track remote branch ‘master‘ from ‘origin‘
  2. 哈工大计算机网络Mooc 最后的总结
  3. 谷歌浏览器播放视频只有声音没有画面解决方法
  4. openstack ice自定义调度算法项目详解(horizon、novaclient、api、scheduler、db、自定义数据库)
  5. maven 查询包依赖
  6. proxmox ve 中文社区_基于ProXmoX VE的虚拟化家庭服务器(篇一)—ProXmoX VE 安装及基础配置...
  7. 韩国区块链步入快车道:SM、Kakao、三星、LG等巨头ALL IN
  8. python自动生成采集规则_快速制作规则及获取规则提取器AP
  9. 三种方法求最大公约数及求n个数的最小公倍数
  10. nb_samples(采样数)转换