Torch7深度学习教程(六)

http://blog.csdn.net/u010946556/article/details/51395013
转载请注明出处

这一章用实例讲解在正式训练前需要对训练集的处理以及基本操作,请大家从头开始运行itorch

这里写图片描述
导入两个包,虽然这章没有涉及网络的建立,但是不导入nn这个包的话,数据的读入会出错,具体我也不太清楚,这个是google出来的,我刚开没有导入nn包,导致文件一直无法读取。
这里写图片描述
参数为文件的绝对路径,文件的下载我放到了这里(需要2个积分下载,请大家支持下,如果实在没有积分的话,给我发私信,我发你)
http://download.csdn.net/detail/u010946556/9518759
这里写图片描述
压缩包里有两个数据,分别导入trainset和testset
这里写图片描述
声明一个classes的数组,用于说明训练集图片所对应的名字,图片总共有10类
这里写图片描述
打印下trainset可以看到有10000张图片,3通道,像素是32x32,对应的标签同样有10000个
这里写图片描述
为了直观些,可以打印其中的一张照片观看下。
itorch.image()是用来打印图片,trainset.data[100]表示第100张图片。
trainset.label[100]表示标签的第100个的标签,注意标签分别是用1到10表示,第100个标签的值是2,对应的classes数组的第2个元素是“汽车”
这里写图片描述
为了利用“nn.StochasticGradient”方法来计算权值,数据集的数据必须满足两个条件:1)数据集必须包含size()方法;2)数据集必须有一个索引,即data[i]表示第i个样本的数据。所以为了使数据集满足以上两点,需要使用setmetatable这个函数。这个函数有时间会单独拿出来一章详细讲,这里就先大概知道它就是用来给数据集添加索引的。将ByteTensor 转变成DoubleTensor。声明一个size()函数,用来返回自身数据的size(1)
这里写图片描述
trainset.data的张量(Tensor)的结构打印出来如上(想象成4维数组),定义的size()函数就是用来放回size(1),即10000。如果这里不太清楚,插个例子说明下。
这里写图片描述
这是一个初始化的张量(Tensor),类似于二维数组,size(1)为3,size(2)为2。
这里写图片描述
说了这么多就是让之前的trainset.data[33](存的是图片)和trainset.label[33](存的是图片的标签)所包含的数据转变成trainset[33]这种形式表示。itorch.image()显示对应的图片。
这里写图片描述
这是第999张图片对应的数据trainset[999],如果换成print(trainset[999][1])则打印的是具体存的图像的数值数值,如下图
这里写图片描述


下面需要再插入一段,讲解下张量(Tensor)的索引操作
这里写图片描述
张量的索引操作最开始都是用“[{ }]”,里面的是”{ }“。结合到我们这个例子,trainset.data的张量是4维的,分别代表着”第几张图片“, ”图片的通道“,”图片的纵像素“,”图片的横像素“,”{ }“代表选择该维纵所有的元素。对应第13行代码里为,选取全部图片,选取第1个通道,选取所有x轴和一轴方向的像素。
这里写图片描述
打印出来为上图结果,注意第二维的值由3变为了1

这里写图片描述
再如这次选取100到105图片,打印结果为6张图片,1通道(红色),32x32像素


这里写图片描述
创建两数组,分别用来存平均值,和标准差,这一步是做数据中心化以及归一化操作。通俗地说中心化就是让图片对应的矩阵的各个数值以0为原点上下波动而不是在其他的某个值波动,归一化是为了加快和使算法更好地收敛,为什么归一化可见下图
这里写图片描述
假如未归一化,收敛的过程可能是这种情况,要9步才能收敛到最优值
这里写图片描述
归一化就是将“椭圆”的数据变得“正圆”,这样收敛的速度会加快。
详情请看cousera上面Andrew Ng的讲解
这里写图片描述
这是一个中心化,归一化的操作,利用for循环完成。
循环是i从1到3,mean[i]为刚刚创建的数组用于存储求得的每个通道的平均值,注意mean( )是求平均值的方法,不要同mean这个数组搞混了。print( )打印算出的第i个通道的平均值mean[i]。调用add( )方法加上负的mean[i]完成中心化。同样,第二部分,算出第i通道的标准差,打印标准差stdv[i],调用div( )除以stdv[i],完成归一化。当然归一化的方法不是唯一的这里是用到标准差处理,相关的其他算法可以google一下。

至此,已完成了网络模型的建立,训练的基本操作,数据的预处理,下一章是做个总结,完整地实现我们的实例,附上代码。

发布了49 篇原创文章 · 获赞 14 · 访问量 19万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览