mxnet-Handwritten Digit Recognition程序理解

来源:互联网 发布:淘宝店铺微淘在那里看 编辑:程序博客网 时间:2024/05/17 06:36

train_mnist 的程序理解

读入图像和标签

经典的卷积神经网络在计算机视觉方面的应用:手写数字体的识别。数据库是灰度级为0-255大小为28*28的图片

此程序实现的是将图片以及对应的标签加载到numpy中。

下面输出前10张图片以及对应的标签


然后为深度学习开源库mxnet创建迭代器。迭代器在调用每个next()的时候都会返回一批数据,其中含有带有标签的图像,这些图像以4维矩阵的形式存储(batch_size, num_channels,width, height)的形式存储

加速数据处理的选项


最后的softmax层将输入映射成了概率


在定义了网络和迭代器以后就可以进行训练了。

Epoch 和 Batch的区别

http://www.cnblogs.com/diegodu/p/5683625.html

(1)batchsize:批大小。在深度学习中,一般采用SGD训练,即每次训练在训练集中取batchsize个样本训练;

(2)iteration:1个iteration等于使用batchsize个样本训练一次;

(3)epoch:1个epoch等于使用训练集中的全部样本训练一次;

 

举个例子,训练集有1000个样本,batchsize=10,那么:

训练完整个样本集需要:

100次iteration,1次epoch。

http://blog.csdn.net/qq_18515405/article/details/51821125

SGD批量随机梯度下降,一批数据进行前向传播,最后加权得到最后的损失函数,然后对权值进行调节,batchsize越大,所需要的内存也就越大,这个首先与硬件环境。

所有的数据完成一次前向传播和反向传播就是一个epoch。

参考

http://mxnet.io/tutorials/python/mnist.html

http://blog.csdn.net/Catalyst_ZX/article/details/53204234


这个是模型参数的设置以及训练的过程


classSpeedometer(__builtin__.object)

 | Calculate and log training speed periodically.

定期计算和记录训练数据

batch_size始终是100,但是每200次会输出计算过程


python logging




http://blog.sina.com.cn/s/blog_4b5039210100f1wv.html

http://www.jb51.net/article/42626.htm

 

python提供了一个日志模块logging,它可以把我们想要的信息全部保存到一个日志文件中,方面我们查看

载入python中的日志模块,生成一个日志对象,设置日志级别为debug级别

Logger.setLevel(lvl)
  设置loggerlevel level有以下几个级别:

  级别高低顺序:

Level orderNOTSET <DEBUG < INFO < WARNING < ERROR < CRITICAL
  如果把looger的级别设置为INFO那么小于INFO级别的日志都不输出,大于等于INFO级别的日志都输出 

 

总的意思就是生成日志文件,在一次迭代中,batchsize的大小是100,每两次迭代输出计算过程,也就是实现这样的输出

 

model.fit所进行的是模型的训练

model.predict进行的是模型的预测

 

这个是在进行除操作之前进行了数据的转换,便于计算出准确率

numpy的一篇学习笔记

http://blog.chinaunix.net/uid-7596337-id-125813.html



用卷积层来表达空间相关性,RNN来表达时间连续性。

优秀的深度学习系统,或者说优秀的科学计算系统,重要的是编程接口的设计,它们都采用将一个领域的特定语言嵌入到一个主语言中,如numpy将矩阵运算嵌入到python中。这类嵌入一般分为两种,一种嵌入较浅,采用的是是命令式编程,每个语句按原来的意思执行,另一种嵌入的较深,采用声明式语言,提供一整套进行应用的迷你语言,也就是用户只需要进行声明,具体操作由系统来完成,比如caffe、TesorFlow

mxnet symbol模块

http://blog.csdn.net/qq_25491201/article/details/51277817

mxnetNDarray是一个基础的计算单元

mxnet采用的是符号编程

http://www.cnblogs.com/zhao441354231/p/6081055.html

定义了符号变量,输入数据是符号变量,输出也是符号变量,所以卷积层输出、激活层的数据输出类型也是符号变量

list_argument()属性可以用来检查计算图的原始的输入参数(不包含中间节点)

list_output()属性可以返回此Symbol的所有输出, 输出会在本层的name属性后自动加上_output

mxnet是将图计算与过程计算混合到了一起,比单纯的图计算的TesorFlow和单纯的过程计算的torch具有更大的灵活性

*args VS  **kwargs

*args表示任何多个无名参数,它是一个tuple**kwargs表示关键字参数,它是一个dict。并且同时使用*args**kwargs时,必须*args参数列要在**kwargs

http://www.cnblogs.com/fengmk2/archive/2008/04/21/1163766.html

mxnet.symbol.Symbol.infer_shape(self, *args, **kwargs): 推测输入参数和输出参数的shape, 返回一个list of tuple

便于知道网络输入的shape和输出的shape


symmxnet的为符号变量相关操作建立的一个库,网络输入数据定义为符号变量,定义网络用到symbol中的相关函数

 

http://blog.csdn.net/qq_25491201/article/details/51277817

每个标志都有一个对应的名字,不指定的话就按默认的名字




这个很棒啊,查看例程或者是自己创建的网络的输入输出参数很方便啊,特别是dictzip())命令的应用使得输入输出参数的可视化更强。

 

pythonOS  模块

操作系统相关的调用和操作

os模块提供了一个统一的操作系统接口函数,接口函数由系统指定,可实现在不同的操作系统平台之间的切换。


有很多的python常用库

http://blog.chinaunix.net/uid-25508301-id-3352833.html

关于OS的详细的函数

http://www.cppblog.com/snowhill/articles/200826.html

http://www.jb51.net/article/57995.htm

http://www.cnblogs.com/kaituorensheng/archive/2013/03/18/2965766.html

几种网络架构的区别

http://www.open-open.com/lib/view/open1449232958202.html

urllib是一个获取urlUniformResource Locators,统一资源定址器)的模块

http://www.cnblogs.com/sysu-blackbear/p/3629420.html

 

gzip模块

gzip是压缩文件格式,一般后缀为.gz。在Linux上这种类型的压缩文件较常见。

matlab 中相关库的说明

http://www.2cto.com/kf/201404/295663.html

 

pythonstruct库的说明

python 网络编程、socket通信

在网络通信中大多数据的传递是以二进制流存在。

传递字符串的时候不用担心,但是在传递int char等基本数据的时候,就需要一种机制将数据结构打包为二进制流形式进行网络传输,然后在接收端再通过某种机制将数据解包成原始的数据结构。

python中的struct就提供了这样的模块,实现python基本类型值与用python字符串格式表示的Cstruct类型间的转化(Thismodule performs conversions between Python values and C structs represented asPython strings.

http://www.cnblogs.com/coser/archive/2011/12/17/2291160.html

原文链接

http://mxnet.io/tutorials/python/mnist.html

 

 


 

 

0 0
原创粉丝点击