caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)

2023-10-27

准备数据集

http://yann.lecun.com/exdb/mnist/提供了训练集与测试集数据的下载。
这里写图片描述
但是caffe并不是直接处理这些数据,而是要转换成lmdb或leveldb格式进行读取。如何转换可以再去查阅相关资料,为简化步骤,直接给出下载地址:
链接:http://pan.baidu.com/s/1nv3a5LJ 密码:jvlt
数据集格式是leveldb。

进行训练

在正式开始训练之前,要先配置一些参数。
进入到配置caffe环境时编译caffe工程的目录。
1、打开目录下的 \examples\mnist 下的lenet_solver.prototxt。
这里写图片描述
更改最后的solver_mode,是CPU版本的填CPU,GPU版本的填GPU。

# The maximum number of iterations
max_iter: 10000

最大迭代次数为10000次,训练进行到10000次停止。

# snapshot intermediate results
snapshot: 5000
snapshot_prefix: "examples/mnist/lenet"

snapshot为中间过程文件,后面输出文件中包含了中间过程生成的caffelmodel文件。

2、接着打开 \examples\mnist 下的lenet_train_test.prototxt。
这里写图片描述
source指定到训练集存放的目录;
backend选择LEVELDB;

这里写图片描述
source指定到测试集存放的目录;
backend选择LEVELDB;

mnist的数据集存放目录在:\examples\mnist
这里写图片描述

3、接下来可以开始训练了。
在编译caffe的工程根目录下编写bat脚本:
这里写图片描述

Build\x64\Release\caffe.exe train --solver=examples/mnist/lenet_solver.prototxt
pause

Build\x64\Release\caffe.exe:指定到caffe.exe所在目录,caffe.exe就是之前caffe工程编译后的可执行文件。
train:进行训练。
--solver=examples/mnist/lenet_solver.prototxt:lenet_solver.prototxt就是之前更改的配置文件。
编写完成后,保存,双击运行bat脚本。
caffe开始训练,首先会打印一些配置信息:
这里写图片描述
我的电脑装的是GPU版本。
训练几分钟后结束。
这里写图片描述
CPU版本会慢一些,可能10多分钟,根据配置不同速度也不一样。
4、到\examples\mnist目录下查看生成的caffemodel文件。
这里写图片描述
文件后的参数指迭代次数。
迭代到5000次时根据当前的参数生成一个caffemodel文件,就是snapshot指定的参数。
10000次时最大迭代次数,即输出结果。
所以测试时,调用的是lenet_iter_10000.caffemodel文件。

测试结果

1、测试之前,还需要产生以下所有图片的均值文件。计算时,会将每幅图片减去这个均值,使用差进行分类。可以有更好的分类效果。
产生均值mean文件需要调用compute_image_mean.exe。
一般会在\Build\x64\Release下生成,如果没有,可以打开caffe的工程,选中对应的工程进行编译,就会产生compute_image_mean.exe。
这里写图片描述
这里写图片描述

在根目录编写bat脚本,调用compute_image_mean.exe生成均值文件。

Build\x64\Release\compute_image_mean.exe examples\mnist\mnist_train_leveldb mean.binaryproto --backend=leveldb
pause

这里写图片描述
生成的mean文件。
这里写图片描述

2、生成了mean文件后,可以使用caffe.exe调用训练好的模型识别手写数字了。
由于之前生成了mean文件,所以还要在lenet_train_test.prototxt中加上它。
这里写图片描述

这里写图片描述

在根目录编写bat脚本,调用caffe.exe识别手写数字。

Build\x64\Release\caffe.exe test --model=examples\mnist\lenet_train_test.prototxt -weights=examples\mnist\lenet_iter_10000.caffemodel -gpu=0
pause

--model=examples\mnist\lenet_train_test.prototxt:指定配置,之前添加了mean文件进去。
-weights=examples\mnist\lenet_iter_10000.caffemodel:指定训练好的模型。
-gpu=0:加上表示使用gpu,如果不是gpu版的去掉这个就可以了。

保存bat脚本,双击运行。
这里写图片描述
看accuracy知道,准确率不是很高。

3、自己手写数字来进行识别,可以使用画图工具绘制。
这里写图片描述
使用matlab编写简单程序将三通道的图像转换成二值图像。
相关步骤可以参考下面这个博客:
http://blog.csdn.net/zb1165048017/article/details/52217772
不做赘述。

我们得到的图片放到一个方便找到的目录吧,我就直接放到\examples\mnist目录下了。
这里写图片描述

编写bat脚本文件,调用classification.exe,没有的自己在编译caffe的visual studio项目里找到对应工程编译下就有了。

Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\0.bmp
Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\1.bmp
Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\2.bmp
Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\3.bmp
Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\4.bmp
Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\5.bmp
Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\6.bmp
Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\7.bmp
Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\8.bmp
Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\9.bmp
pause

识别效果不是很好,可能训练的迭代次数还是少了,有待改进。
这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows) 的相关文章

  • 用于预测的 Tensorflow 导出估计器

    我想知道如何导出估计器 然后导入它以从 MNIST 教程进行预测 张量流的页面 谢谢你 The Estimator has model dirargs 将保存模型的位置 所以在预测过程中我们使用Estimator并致电predict重新创建
  • 如何在caffe中将多个N维数组输入到网络中?

    我想在 caffe 中创建一个用于语义分割的自定义损失层 需要多个输入 我希望这个损失函数有一个额外的输入因子 以惩罚小物体的漏检 为此 我创建了一个图像 GT 其中每个像素都包含一个权重 如果像素属于小物体 则权重较高 我是 caffe
  • 解析 Yann LeCun 的 MNIST IDX 文件格式

    我想了解一下如何打开此版本的 MNIST 数据集 http yann lecun com exdb mnist 例如训练集标签文件train labels idx1 ubyte定义为 TRAINING SET LABEL FILE trai
  • Tensorflow 因 CUBLAS_STATUS_ALLOC_FAILED 崩溃

    我使用简单的 MINST 神经网络程序在 Windows 10 上运行 tensorflow gpu 当它尝试运行时 它遇到了CUBLAS STATUS ALLOC FAILED错误 谷歌搜索没有发现任何东西 I c tf jenkins
  • TensorFlow ValueError:变量不存在,或者不是使用 tf.get_variable() 创建的

    我是 Tensorflow 的新手 正在尝试实现生成对抗网络 我正在关注this https github com adeshpande3 Generative Adversarial Networks blob master Genera
  • Caffe 中的“lr_policy”是什么?

    我只是想知道如何使用Caffe http caffe berkeleyvision org 为此 我只是看看不同的 prototxt示例文件夹中的文件 有一个选项我不明白 The learning rate policy lr policy
  • 在 Python 中未安装 caffe 的情况下从 .caffemodel 中提取权重

    有没有一种相对简单的方法可以从 Caffe Zoo 中的众多预训练模型之一中提取 Python 中的权重没有咖啡 也不是 pyCaffe 即解析 caffemodel转换为 hdf5 numpy 或任何 Python 可以读取的格式 我找到
  • keras 规范化轴参数有什么作用?

    我是深度学习的初学者 正在 keras 中处理 mnist 数据集 我使用归一化作为 tf keras utils normalize x train axis 1 我不明白轴参数是什么意思 你能帮我解决这个问题吗 Normalize 函数
  • Caffe 快照:.solverstate 与 .caffemodel

    训练网络时 每 N 次迭代拍摄的快照有两种形式 一个是 solverstate 文件 我想它就像它听起来的那样 存储损失函数和梯度的状态等 另一个是 caffemodel 文件 我知道它存储训练后的参数 如果您想要预训练的模型 caffem
  • 在 ubuntu 16.04 中安装 Caffe 时遇到困难

    操作系统 ubuntu 16 04 CUDA 7 5 库德恩 5 我正在关注this https github com BVLC caffe wiki Ubuntu 16 04 or 15 10 OpenCV 3 1 Installatio
  • caffe: **group** 参数是什么意思?

    我已阅读有关的文档group param group g 默认 1 如果 g gt 1 我们将每个过滤器的连接限制为输入的子集 具体地 将输入和输出通道分为g组 第i个输出组通道将仅与第i个输入组通道连接 但首先我不明白它们的确切含义 其次
  • keras mnist.load_data() 速度超慢,一段时间后会抛出错误

    这是我使用的完整代码 import os import numpy as np import matplotlib pyplot as plt from tqdm import tqdm from keras layers import I
  • PyInstaller“ValueError:太多值无法解压”

    pyinstaller 版本 3 2 操作系统 win10 我的 python 脚本在 Winpython Python 解释器中运行良好 但是当我使用 Pyinstaller 包时 python 脚本包含 caffe 模块 我将面临的问题
  • 图像增强使性能变得更差[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在研究一个图像分割项目 并一直在尝试采用图像增强技术来增加训练集的大小 起初 我只是尝试使用水平翻转将图像尺寸放大一倍 但我发现性
  • 如何设计深度卷积神经网络? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 据我了解 所有 CNN 都非常相似 它们都有一个卷积层 后面是池化层和 relu 层 有些具有专门的层 例如 FlowNet 和 Segn
  • 无法导入caffe

    我执行了make pycaffe在 caffe 目录中并且运行良好 我也这样做了 gsamaras gsamaras A15 caffe python export PYTHONPATH PYTHONPATH home gsamaras c
  • Caffe 的 LSTM 模块

    有谁知道 Caffe 是否有一个不错的 LSTM 模块 我从 russel91 的 github 帐户中找到了一个 但显然包含示例和解释的网页消失了 以前是http apollo deepmatter io http apollo deep
  • 如何在 Caffe 中沿着通道分割 Blob

    我想在Caffe中分割Blob通道 这样我就可以分割一个Blob N c w h 分成两个大小相同的输出 Blob N c 2 w h 我上面描述的是非常笼统的 我实际上想做的是将一个两通道输入图像分离成两个不同的图像 一个进入卷积层 另一
  • 批量大小不适用于带有deploy.prototxt的caffe

    我正在努力让我的分类过程更快一些 我想增加我的deploy prototxt中的第一个input dim 但这似乎不起作用 甚至比对每张图像进行分类还要慢一点 部署 prototxt input data input dim 128 inp
  • 如何创建 MNIST 数据集之类的文件

    所以我有一堆图像 PNG 它们的名称可以用作标签 有没有一种工具或示例说明我如何拍摄这些图像并创建像 MNIST IDX 这样的数据集 有很多关于如何阅读它们的示例 但没有关于如何创建它们的示例 任何帮助将不胜感激 这会有所帮助 image

随机推荐

  • Flutter学习 — 从新页面返回数据给上一个页面

    效果图一 点击按钮 效果图二 点击YES后 返回上一级页面并传值 效果图三 收到值 并用底部弹出框显示结果 注释 代码 import package flutter material dart void main runApp new Ma
  • 关于Git的一点思考

    GIT历史 很多人都知道 Linus在1991年创建了开源的Linux 从此 Linux系统不断发展 已经成为最大的服务器系统软件了 Linus虽然创建了Linux 但Linux的壮大是靠全世界热心的志愿者参与的 这么多人在世界各地为Lin
  • YOLOV5之TensorRT模型部署

    目录 一 环境版本 1 1 概述 1 2 Ubuntu版本 1 3 python pytorch与tensorrt版本 1 4 cudnn版本 1 5 驱动版本 1 6 opencv版本 二 TensorRT与opencv环境安装 2 1
  • 虚拟化概念详解

    虚拟化的定义 虚拟化技术可以认为是一种对物理资源抽象化 进而形成虚拟化的版本的技术 虚拟化的目的 物理资源组成庞大的资源池 然后可以按需分配 随意切割物理资源 虚拟化资源分类 服务器虚拟化 服务器虚拟化就是将虚拟化技术应用于服务器 将一台服
  • 【STM32标准库】【基础知识】ADC转换,非DMA的单通道和多通道

    文章目录 ADC概述 ADC初始化 GPIO初始化 时钟 全局ADC设置 定义结构体 是否使用DMA 工作模式 分频 采样延迟 例程 单独ADC设置 定义结构体 连续转换 数据对齐 外部触发 通道数量 分辨率 扫描模式 例程 设置规则 打开
  • 【Git】(五)切换分支

    1 切换分支 git checkout newBranch 2 如果需要保留本地修改 git status git add git commit amend git checkout newBranch 3 强制切换分支 放弃本地修改 强制
  • vgg16-pytorch

    基于pytorch实现VGG16模型 刚听完土哥的入门pytorch 试着写一个不完善的vgg16 VGG16具体的架构 VGG16模型构建 卷积池化后尺寸计算公式 引入库 from torch import nn from torch n
  • 深入理解java虚拟机(十) Java 虚拟机运行时栈帧结构

    运行时栈帧结构 栈帧 Stack Frame 是用于虚拟机执行时方法调用和方法执行时的数据结构 它是虚拟栈数据区的组成元素 每一个方法从调用到方法返回都对应着一个栈帧入栈出栈的过程 每一个栈帧在编译程序代码的时候所需要多大的局部变量表 多深
  • <5>STM32库函文件分析-库函数

    使用STM32F10x的库函数文件编程就要对它的库文件有一个相对清晰的认识 即使不能做到知根知底 但当要使用到MCU的某个功能时 要知道相应的库函数在哪个对应的 h和 c 文件中 看懂并了解它的寄存器 下面我写一下我对其的认知 有错误的地方
  • SQLMAP工具 详细使用方法

    文章目录 SQLMAP简介 SQLMAP支持的注入模式 SQLMAP支持的数据库 SQLMAP安装 Linux Windows 更新 SQLMAP参数详解 使用 Options Target Reques Optimization Inje
  • UnityShader入门精要——透明物体阴影

    透明度测试 Shader Unity Shaders Book Chapter 9 Alpha Test With Shadow Properties Color Color Tint Color 1 1 1 1 MainTex Main
  • 2023最新软件测试面试题(带答案)

    1 请自我介绍一下 需简单清楚的表述自已的基本情况 在这过程中要展现出自信 对工作有激情 上进 好学 面试官您好 我叫 今年26岁 来自江西九江 就读专业是电子商务 毕业后就来深圳工作 有三年的软件测试工程师的经验 我性格比较开朗 能和同事
  • 单例模式-Golang实现

    目录 非线程安全的懒汉模式 线程安全的懒汉模式 使用sync Mutex 互斥锁实现 使用sync Once实现 饿汉模式 比较懒汉模式和饿汉模式 非线程安全的懒汉模式 main go package simple import fmt s
  • Uncaught TypeError:Cannot read property ‘apply‘ of undefined

    报错信息 这是执行了删除功能之后就变成这样了 前端页面显示 一直是读取中状态 报错原因 本来是想做一个状态的效果 选中数据时 删除按钮才可用状态 在前端controller类里面调用了以下方法 忘记去写具体方法了 所以就出现了上面的问题 解
  • ES6 - lterator

    1 迭代器 内部迭代器和外部迭代器 迭代模式 提供一种方法顺序获得集合对象中的各个元素 是一种最简单也是最常见的设计模式 提供特定的接口 内部迭代器 本身是函数 定义好内部迭代规则 外部只需一次初始调用 例如 Array prototypr
  • 一篇关于运放自激振荡的帖子

    在负反馈电路时 反馈系数F越小越可能不产生自激震荡 换句话说 F越大 产生自激震荡的可能性越大 对于电阻反馈网络 F的最大值是1 F 1的典型电路就是电压跟随电路 这就是电压跟随运放易震荡原因 这也是我们常常会看到运放手册标有单位增益稳定说
  • Python 下中文分词算法的简单示例

    代码如下 import jieba 需要先安装jieba库 text Python中文分词是一个很好用的工具 在自然语言处理领域得到了广泛应用 待分词的文本 使用jieba进行分词 cut方法返回一个生成器 遍历该生成器可以得到每个词语 s
  • Python3.5(ANCONDA3)连接MYSQL数据库

    Python3和Python2连接MYSQL数据库稍微不同 我们这里要使用PyMySQL 什么是 PyMySQL PyMySQL 是在 Python3 x 版本中用于连接 MySQL 服务器的一个库 Python2中则使用mysqldb P
  • String字符串常量池

    首先看一段这样的代码 String str1 abc String str2 abc String str3 new String abc System out println str1 str2 System out println st
  • caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)

    准备数据集 http yann lecun com exdb mnist 提供了训练集与测试集数据的下载 但是caffe并不是直接处理这些数据 而是要转换成lmdb或leveldb格式进行读取 如何转换可以再去查阅相关资料 为简化步骤 直接