深度学习笔记(四)用Torch实现MNIST手写数字识别

本文介绍如何使用Torch实现MNIST手写数字识别任务,通过讲解LeNet网络模型并提供完整代码,适合深度学习初学者实践。
摘要由CSDN通过智能技术生成

本节代码地址:

https://github.com/vic-w/torch-practice/tree/master/mnist


MNIST是手写数字识别的数据库。在深度学习流行的今天,MNIST数据库已经被大家玩坏了。但是用它来学习卷积神经网络是再好不过的了。这一次,我们就用Torch来实现MNIST数据库的识别。

这一次的代码用到了mnist库,如果之前没有安装,可以在命令行键入:

luarocks install mnist

和往常一样,我们要先包含必要的库

require 'torch'
require 'nn'
require 'optim'
mnist = require 'mnist'
其中require ’mnist'一句返回了一个mnist的对象。可以用下面两句来获得mnist的图像数据。

fullset = mnist.traindataset()
testset = mnist.testdataset()

接下来我们主要关注的就是模型如何建立,因为除了模型之外,其他的代码都是大同小异的。

首先来看一下著名的LeNet网络模型:


这个图是从Caffe那里借来的。其实用Caffe训练LeNet模型真的是又快又好。但我们的目的是为了学习,所以我们还是用Torch再把它实现一遍。

从上面的图上可以看出,这个模型首先使用了Scale层(蓝色),把输入的图片取值缩小到一定范围内。然后是连续两个卷积层conv1和conv2(红色),分别接一个池化层pool1和pool2(黄色),最后是两个全连接层ip1和ip2 (紫色,ip=inner product),将所有的信息归结到最后的Softmax层(蓝色)。其中只有在两个全连接层之间使用了激活层,激活方式是ReLU(Rectified Linear Units)

将这个模型用Torch的代码实现也非常简单。首先仍然是建立一个容器用来存放各种模块。

model = nn.Sequential()

放入一个reshape模块。因为mnist库的原始图片是储存为1列728个像素的。我们需要把它们变成1通道28*28的一个方形图片。

model:add(nn.Reshape(1, 28, 28))
<
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值