使用caffe对mnist进行训练遇到的点点滴滴

本文介绍使用Caffe深度学习框架训练MNIST手写数字识别模型的全过程,包括LeNet-5网络配置、数据集准备、训练与测试步骤,并解决常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 前言

caffe 是一个非常好用的处理深度学习的基本框架,使用C++编写,因而速度非常快,同时提供了python 和 matlab接口,使用起来非常方便,但是由于caffe的文档资源相对比较少,因而上手起来并不是非常容易。在捣腾了很久之后,终于跑通了mnist数据集,这里将期间遇到的一些问题做一些记录,方便以后查阅。

2. LeNet简介

  1. LeNet-5这是一个非常成熟了的CNN神经网络,主要用来识别手写数字
  2. 它的基本结构如下所示:
    这里写图片描述
    这里写图片描述
    通常意义上这是一个7层神经网络,通过对输入图像卷积,池化,再卷积,再池化,全链接,ReLU激励,SoftMax计算互熵损失,可以得到一个非常好的识别效果。

3. prototxt数据格式

  1. caffe 采用的是 prototxt 这种配置格式进行网络的配置,这种格式有点类似于 gson,但是据说会更加高效,参考文档路径: https://developers.google.com/protocol-buffers/docs/overview
  2. 当然,如果看英文非常费劲的话,可以看看这位大神的博客: Caffe学习系列(2):数据层及参数, Caffe学习系列(3):视觉层(Vision Layers)及参数, 当然,英文水平好的可以直接查看官方文档:Training LeNet on MNIST with Caffe, 当然对于我们新手而言,只要基本可以看懂就可以了,需要使用的时候,可以依葫芦画瓢。
  3. 通过prototxt 定义的神经网络,非常清晰明了,有多少层,就定义多少个layer,设置好他们的层属性,数据流动即可

4. mnist 数据集介绍

  1. THE MNIST DATABASE of handwritten digits这个数据集是业界知名的用于手写数字检测识别的数据集,官网提供了数据文件下载,并给出了相应的文件格式
  2. 如果希望能够看到相应的训练图像的,可以简单的编写一个转换函数进行实现,具体可以参考博客: 如何用python解析mnist图片

5. mnist 训练

  1. 由于我们下载的是微软封装过的caffe, 在example 文件夹下可以找到对应mnist文件夹,将相应的数据文件放入相应位置,在命令行中输入下面指令,即可实现网络的训练。
    caffe.exe  train --solver=examples/mnist/lenet_solver.prototxt  

6. 测试自己的数据

  1. 经过训练之后,我们可以得到我们想要的网络权重文件
    这里写图片描述
  2. 测试自己的数据实际上使用的是 caffe 指令,类似于训练的过程,我们可以定义自己的prototxt训练文件(可以直接将原始的lenet_train_test.prototxt拷贝一份,进行修改),只需要填入自己的测试数据路径即可
    这里写图片描述

  3. 创建自己的数据集可以使用caffe 提供的工具 convert_imageset
    注意需要给定图像所在文件夹,以及相应的图像描述文本文件
    这里写图片描述
    转化代码如下:
    这里写图片描述

  4. 进行测试
    这里写图片描述
    这里写图片描述
    可以看到这个结果准确率非常低,这是因为,我们这里的标号都是胡乱给值的
    正确数据跑出来的结果如下:
    这里写图片描述
    可以看到,这个模型的准确度还是非常高的。

7. 跑单幅图片数据

  1. 以上过程,仅仅可以看成是训练和测试的过程,如果我们需要判定一个图像是属于什么类别, 就需要使用到classification 指令了。可以参考文章 mnist实例编译之model的使用-classification
  2. 此处,需要定义自己的deploy.prototxt 文件,这个文件和训练时候的文件非常类似,只是输入数据层不同,并且没有softmaxwithloss层,多了一个softmax层(由于中间部分的网络参数都相同,这里省略了)
layer{
    name: "data"
    type: "Input"
    top: "data"
    input_param{shape:{
        dim: 1 dim: 1 dim: 28 dim : 28
    }}
}
... 
layer {
  name: "loss"
  type: "Softmax"
  bottom: "ip2"
  top: "loss"
}
  1. 在使用classification命令的时候,需要使用图像均值文件,可以通过compute_image_mean 指令获取得到
  2. 检测效果图
    这里写图片描述

8. 遇到的问题

  1. 训练的时候模型文件和权重文件位置放反了
    这里写图片描述
  2. 测试数据集格式与网络训练时候的格式不符合
    这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值