这个实验拿来入门最好了,很轻松,执行作者写好的脚本就可以;

官网链接:http://caffe.berkeleyvision.org/gathered/examples/mnist.html

跟着这个实验,可以观察caffe使用的流程,深入一点,可以看看作者写的shell脚本做了哪些事情;

下面我们一步步来执行,并作简单的分析:

1 首先准备数据集

执行下面的命令。$CAFFE_ROOT是指caffe安装的目录,比如说我的是/home/sloanqin/caffe-master/

[cpp] view plaincopy
cd $CAFFE_ROOT
./data/mnist/get_mnist.sh //执行下载mnist数据集脚本
./examples/mnist/create_mnist.sh //将下载的mnist数据集转换成lmdb格式的数据
我们来看看这两个脚本做了什么:

1.1 执行脚本get_mnist.sh:

[cpp] view plaincopy
get_mnist.sh脚本文件如下:
[cpp] view plaincopy

# This scripts downloads the mnist data and unzips it.  

DIR=”(cd"( cd "(dirname “0”)”;pwd−P)”cd0”)” ; pwd -P )” cd DIR

echo “Downloading…”

wget –no-check-certificate http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz
wget –no-check-certificate http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz
wget –no-check-certificate http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz
wget –no-check-certificate http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz

echo “Unzipping…”

gunzip train-images-idx3-ubyte.gz
gunzip train-labels-idx1-ubyte.gz
gunzip t10k-images-idx3-ubyte.gz
gunzip t10k-labels-idx1-ubyte.gz

# Creation is split out because leveldb sometimes causes segfault
# and needs to be re-created.

echo “Done.”
[html] view plaincopy
作用:下载下面四个文件,并解压;
[html] view plaincopy
train-images-idx3-ubyte.gz训练集
train-labels-idx1-ubyte.gz训练集的标签
t10k-images-idx3-ubyte.gz测试集
t10k-labels-idx1-ubyte.gz测试集的标签
2 定义caffe的网络结构:.prototxt 文件

caffe的网络结构定义在后缀名为.prototxt的文件中,我们根据自己的需要定义自己的网络结构;

在这个实验中,我们使用作者已经为我们定义好的lenet网络结构,大家可以在下面的目录中找到该文件:

$CAFFE_ROOT/examples/mnist/lenet_train_test.prototxt

在我的电脑上,目录是/home/sloanqin/examples/mnist/lenet_train_test.prototxt

在后续的工作中,定义好自己的网络结构是最关键的,直接决定了性能,这里我们就不多说了;

3 定义caffe运算的时候的一些规则:solver.prototxt 文件

该文件在下面的目录中:

$CAFFE_ROOT/examples/mnist/lenet_solver.prototxt

文件内容如下:作者给出了英文注释,我再给出中文的注释

[html] view plaincopy
# 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
中文注释版本:
[html] view plaincopy

# 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  // 这个参数指定测试的时候送入多少个 // 这里说明一个知识:GPU在计算的时候,每次迭代是多张图片,我们称为一个batch // 作者提到:test batch size 100,就是说每个包有100张图片 // 这里设置 st_iter=100,就是测试的时候一共输入100*100=10000张图片 //所以,test_iter 的英文翻译就是:测试时迭代次数
# Carry out testing every 500 training iterations.
test_interval: 500  //定义每500次迭代,做一次测试
# The base learning rate, momentum and the weight decay of the network.
base_lr: 0.01    // 定义了刚开始的学习速率是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     //每迭代100次,显示一次计算结果
# The maximum number of iterations
max_iter: 10000   //设置最大的迭代次数
# snapshot intermediate results
snapshot: 5000    // 保存中间运行时得到的参数结果,这里设置成每5000次迭代保存一次,这样运行中间断掉了,我们可以从断掉的地方继续开始
snapshot_prefix: “examples/mnist/lenet”
# solver mode: CPU or GPU
solver_mode: GPU   //使用CPU还是GPU计算
4 执行命令进行训练
最后一步就是执行脚本开始训练:

cd $CAFFE_ROOT
./examples/mnist/train_lenet.sh
我们打开这个脚本,可以看到特别简单,就一行:
./build/tools/caffe train –solver=examples/mnist/lenet_solver.prototxt
这行代码的意思:调用./build/tools/caffe目录下面的train函数,train函数的输入参数是solver.prototxt文件的路径:–solver=examples/mnist/lenet_solver.prototxt

5 结果

运行的过程中,可以卡到test 的准确率在不断上升;运行结束后,会生成模型文件:lenet_iter_10000.caffemodel

还有一个文件是snapshot 保存的:lenet_iter_10000.solverstate

原文链接:http://write.blog.csdn.net/postedit/49147935

caffe 练习1:training LeNet on MNIST with Caffe/ 用LeNet识别手写字符集 Mnist------by 香蕉麦乐迪相关推荐

  1. Android TensorFlow Lite 深度学习识别手写数字mnist demo

    一. TensorFlow Lite TensorFlow Lite介绍.jpeg TensorFlow Lite特性.jpeg TensorFlow Lite使用.jpeg TensorFlow L ...

  2. Python神经网络识别手写数字-MNIST数据集

    Python神经网络识别手写数字-MNIST数据集 一.手写数字集-MNIST 二.数据预处理 输入数据处理 输出数据处理 三.神经网络的结构选择 四.训练网络 测试网络 测试正确率的函数 五.完整的 ...

  3. 从零开始的神经网络构建历程(二,用全连接前馈神经网络识别手写数字mnist)

    本系列的上一篇博文最后提出了一个问题,是有关如何通过torch来实现给定的神经网络的,这里公布一下我自己的回答: class Net(nn.Module):def __init__(self):sup ...

  4. KNN识别手写数字MNIST

    使用sklearn的KNN实现类,neighbors.KNeighborsClassifier,模型精度达到96.7% 数据集可以在线下载,也可以手动下载: mnist数据集地址:https://ww ...

  5. TensorFlow经典入门示例MNIST(识别手写的数字图片)

    文章目录 MNIST是什么? MNIST的组成 MNIST存储方式 使用Keras编码 运行说明与问题 图形化显示和理解 安装matplotlib 折线图简单示例 显示MNIST中的图 TensorF ...

  6. 多种深度模型实现手写字母MNIST的识别(CNN,RNN,DNN,逻辑回归,CRNN,LSTM/Bi-LSTM,GRU/Bi-GRU)

    多种深度模型实现手写字母MNIST的识别(CNN,RNN,DNN,逻辑回归,CRNN,LSTM/Bi-LSTM,GRU/Bi-GRU 1.CNN模型 1.1 代码 1.2 运行结果 2.RNN模型 2 ...

  7. 菜菜学paddle第六篇:利用LeNet卷积神经网络识别手写数字

    前言 LeNet是最早的卷积神经网络之一.1998年,Yann LeCun第一次将LeNet卷积神经网络应用到图像分类上,它通过连续使用卷积和池化层的组合提取图像特征,在手写数字识别任务中取得了巨大成 ...

  8. Tensorflow笔记__使用mnist数据集并测试自己的手写图片

    内容源于曹建老师的tensorflow笔记课程 源码链接:https://github.com/cj0012/AI-Practice-Tensorflow-Notes 测试图片下载:https://g ...

  9. [tensorflow、神经网络] - 使用tf和mnist训练一个识别手写数字模型,并测试

    参考 包含: 1.层级的计算.2.训练的整体流程.3.tensorboard画图.4.保存/使用模型.5.总体代码(含详细注释) 1. 层级的计算 如上图,mnist手写数字识别的训练集提供的图片是 ...

最新文章

  1. 基于python的数据分析方法五种_利用Python进行数据分析 第5章 pandas入门(1)
  2. QIIME 2教程. 26为QIIME 2开发新插件DevelopingPlugin(2021.2)
  3. isNumeric isInteger isDate
  4. 实操:商品列表三级分类的实现方法
  5. 那个双非本科,还想转算法岗的姑娘,最后怎么了?
  6. 温商机器人企业_7家温商企业上榜“中国企业500强”
  7. bzoj1878: [SDOI2009]HH的项链
  8. bigdecimal js 判断等于0_为啥阿里禁用BigDecimal的equals方法做等值比较
  9. 老对手 Intel 与 AMD 也开始合作打造新品了,Nvidia 怎么看?
  10. SQL截断增强功能:SQL Server 2019中的静默数据截断
  11. 一文读懂商业智能(BI):企业数据分析的中枢
  12. 原生js滚动到底部加载数据和下拉刷新 Scrollload
  13. 使用kibana可视化报表实时监控你的应用程序,从日志中找出问题,解决问题
  14. Reactor模式 NIO epoll
  15. 这样做框架结构图,让你的PPT更有创意!
  16. 芯片验证学perl还是python_科学网—用python或perl语言简单验证RSA算法 - 康建的博文...
  17. 【数学】一些数学概念
  18. 马斯克:特斯拉考虑在加拿大、墨西哥建厂
  19. 分享一个自律的小故事
  20. 基于SSM框架食堂订餐微信小程序

热门文章

  1. 计算机语言中display翻译,display的意思在线翻译,解释display中文英文含义,短语词组,音标读音,例句,词源,同义词,反义词【澳典网ODict.Net】...
  2. java 方法 参数 引用_Java 基础
  3. Zabbix的模板管理与配置
  4. 现代操作系统: 第六章 死锁
  5. python zipfile教程_Python模块zipfile原理及使用方法详解
  6. linux 生成字母序列,Python序列之字符串
  7. java静态分派_Java基础——重载、静态分派与动态分派
  8. BZOJ4238 : 电压
  9. 如何检查对象的类型[iOS/Android/Windows Phone]
  10. [翻译]Global Descriptor Table-GDT