一个门外汉写的MXNET跑MNIST的例子,三层全连接层最后验证率是97%左右,毕竟是第一个例子,主要就是用来理解MXNet怎么使用。

#导入需要的模块
import numpy as np #numpy只保存数值,用于数值运算,解决Python标准库中的list只能保存对象的指针的问题
import os #本例子中没有使用到
import gzip #使用zlib来压缩和解压缩数据文件,读写gzip文件
import struct #通过引入struct模块来处理图片中的二进制数据
import mxnet as mx #引入MXNet包
import logging #引入logging包记录日志 #利用MNIST数据集进行训练 def read_data(label_url,image_url): #定义读取数据的函数
with gzip.open(label_url) as flbl: #解压标签包
magic, num = struct.unpack(">II",flbl.read(8)) #采用Big Endian的方式读取两个int类型的数据,且参考MNIST官方格式介绍,magic即为magic number (MSB first) 用于表示文件格式,num即为文件夹内包含的数据的数量
label = np.fromstring(flbl.read(),dtype=np.int8) #将标签包中的每一个二进制数据转化成其对应的十进制数据,且转换后的数据格式为int8(-128 to 127)格式,返回一个数组
with gzip.open(image_url,'rb') as fimg: #已只读形式解压图像包
magic, num, rows, cols = struct.unpack(">IIII",fimg.read(16)) #采用Big Endian的方式读取四个int类型数据,且参考MNIST官方格式介绍,magic和num上同,rows和cols即表示图片的行数和列数
image = np.fromstring(fimg.read(),dtype=np.uint8).reshape(len(label),rows,cols) #将图片包中的二进制数据读取后转换成无符号的int8格式的数组,并且以标签总个数,行数,列数重塑成一个新的多维数组
return (label,image) #返回读取成功的label数组和image数组
#且fileobject.read(size)的时候是按照流的方式读取(可test) (train_lbl, train_img) = read_data('mnist/train-labels-idx1-ubyte.gz','mnist/train-images-idx3-ubyte.gz') #构建训练数据
(val_lbl, val_img) = read_data('mnist/t10k-labels-idx1-ubyte.gz','mnist/t10k-images-idx3-ubyte.gz') #构建测试数据 def to4d(img): #定义一个函数用于生成四维矩阵
return img.reshape(img.shape[0],1,28,28).astype(np.float32)/255 #将图像包中的数组以标签总个数,图像通道数(MNIST数据集为黑白数据集故只为1),行数,列数重塑后复制为一个数据类型为float32的新的四维矩阵,且其中的元素值都除以255后转化为0-1的浮点值 batch_size = 100 #定义每次处理数据的数量为100
train_iter = mx.io.NDArrayIter(to4d(train_img),train_lbl,batch_size,shuffle=True) #构建训练数据迭代器,且其中shuffle表示采用可拖动的方式,意味着可以将在早期已经训练过的数据在后面再次训练
val_iter = mx.io.NDArrayIter(to4d(val_img),val_lbl,batch_size) #构建测试数据迭代器 #创建多层网络模型
data = mx.sym.Variable('data') #创建一个用于输入数据的PlaceHolder变量(占位符)
data = mx.sym.Flatten(data=data) #将data中的四维数据转化为二维数据且其中一维为每次处理数据的数量,第二维即为每张图片的图像通道数×长×宽(即为其像素点个数×图像通道数)
fc1 = mx.sym.FullyConnected(data=data,name='fc1',num_hidden=128) #创建第一层全连接层,输入数据为data,num_hidden表示该隐藏层有128个用于输出的节点
act1 = mx.sym.Activation(data=fc1,name='relu1',act_type='relu') #为第一层全连接层设定一个Relu激活函数,输入数据为fc1
fc2 = mx.sym.FullyConnected(data=act1,name='fc2',num_hidden=64) #创建第二层全连接层,输入数据为act1,num_hidden表示该隐藏层有64个用于输出的节点
act2 = mx.sym.Activation(data=fc2,name='relu2',act_type='relu') #为第一层全连接层设定一个Relu激活函数,输入数据为fc2
fc3 = mx.sym.FullyConnected(data=act2,Name='fc3',num_hidden=10) #创建第三层全连接层,输入数据为act2,num_hidden表示该隐藏层有10个用于输出的节点
mlp = mx.sym.SoftmaxOutput(data=fc3,name='softmax') #对输入的数据执行softmax变换,并且通过利用logloss执行BP算法 logging.getLogger().setLevel(logging.DEBUG) #返回作为层次结构根记录器的记录器,且记录等级作为DEBUG #构建前馈神经网络模型
model = mx.model.FeedForward(
symbol = mlp, #使网络结构为构建好的mlp
num_epoch = 10, #数据的训练次数为10
learning_rate = 0.1 #使模型按照学习率为0.1进行训练
)
#数据拟合,训练模型
model.fit(
X = train_iter, #设置训练迭代器
eval_data = val_iter, #设置测试迭代器
batch_end_callback = mx.callback.Speedometer(batch_size,200) #在每一批epoches结尾时调用,打印logging信息(每经过200个batch_size打印logging)
)

MXNet学习~第一个例子~跑MNIST的更多相关文章

  1. MXNet学习-第一个例子:训练MNIST数据集

    一个门外汉写的MXNET跑MNIST的例子,三层全连接层最后验证率是97%左右,毕竟是第一个例子,主要就是用来理解MXNet怎么使用. #导入需要的模块 import numpy as np #num ...

  2. Keras学习:第一个例子-训练MNIST数据集

    import numpy as npimport gzip import struct import keras as ks import logging from keras.layers impo ...

  3. ElasticSearch 5学习(5)——第一个例子(很实用)

    想要知道ElasticSearch是如何使用的,最快的方式就是通过一个简单的例子,第一个例子将会包括基本概念如索引.搜索.和聚合等,需求是关于公司管理员工的一些业务. 员工文档索引 业务首先需要存储员 ...

  4. mxnet实战系列(一)入门与跑mnist数据集

    最近在摸mxnet和tensorflow.两个我都搭起来了.tensorflow跑了不少代码,总的来说用得比较顺畅,文档很丰富,api熟悉熟悉写代码没什么问题. 今天把两个平台做了一下对比.同是跑mn ...

  5. emberjs学习一(环境和第一个例子)

    code { margin: 0; padding: 0; white-space: pre; border: none; background: transparent; } code, pre t ...

  6. ElasticSearch 5学习(5)——第一个例子

    想要知道ElasticSearch是如何使用的,最快的方式就是通过一个简单的例子,第一个例子将会包括基本概念如索引.搜索.和聚合等,需求是关于公司管理员工的一些业务. 员工文档索引 业务首先需要存储员 ...

  7. GLSL着色语言学习。橙皮书第一个例子GLSL+OpenTK+F#的实现。

    Opengl红皮书有选择的看了一些,最后的讲着色语言GLSL的部分看的甚为不理解,然后找到Opengl橙皮书,然后就容易理解多了. 在前面,我们或多或少接触到Opengl的处理过程,只说前面一些处理, ...

  8. tensorflow学习笔记——使用TensorFlow操作MNIST数据(2)

    tensorflow学习笔记——使用TensorFlow操作MNIST数据(1) 一:神经网络知识点整理 1.1,多层:使用多层权重,例如多层全连接方式 以下定义了三个隐藏层的全连接方式的神经网络样例 ...

  9. tensorflow学习笔记——使用TensorFlow操作MNIST数据(1)

    续集请点击我:tensorflow学习笔记——使用TensorFlow操作MNIST数据(2) 本节开始学习使用tensorflow教程,当然从最简单的MNIST开始.这怎么说呢,就好比编程入门有He ...

随机推荐

  1. BZOJ4566: [Haoi2016]找相同字符

    Description 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数.两个方案不同当且仅当这两 个子串中有一个位置不同. Input 两行,两个字符串s1,s2,长度分别 ...

  2. c#使用多线程的几种方式示例详解

    本文转载自:http://www.jb51.net/article/46234.htm 本文章主要介绍了c#使用多线程的几种方式,通过示例学习c#的多线程使用方式,大家参考使用吧 (1)不需要传递参数 ...

  3. Java技巧(代码简略)

    1.将数组循环显示 int[] num = new int[]{1,3,5,7,9}; int currentNum=0; num[++current%num.length];

  4. Objective-O Runtime 运行时初体验

    Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一 ...

  5. css 温故而知新 slideDown/slideUp 新思路

    默认设置高度为0; -webkit-transition:.3s all ease;transition:.3s all ease;opacity:0;height:0; 需要时添加高度即可 heig ...

  6. noip201403螺旋矩阵【普及组】数学算法

    思路如下: 1.输入n>>a>>b; 2.用一个循环缩小范围求出a,b所示的数所在的圈数q; 3.再一个循环求出圈数q的第1个数的值sum; 4.用四个if判断a,b所示的数在 ...

  7. 1.Powershell认识

    Windows PowerShell 是一种命令行外壳程序和脚本环境,自Windows Server 2008开始就有内置于系统当中,有取代CMD之势.管理员使用Powershell完成一些日常重复的 ...

  8. memcached服务器

    memcached是高性能的分布式内存缓存服务器,通过缓存数据库查询结果,减少数据库访问次数,提高动态web应用的速度和可扩展性.为了提高性能,memcached把数据存储在内存中,重启memcach ...

  9. centos7设置网关

    1.cd /etc/sysconfig/network-scripts 2.vi 网络文件 3.service network restart

  10. BasicDataSource的配置参数

    参数 描述 username 传递给JDBC驱动的用于建立连接的用户名 password 传递给JDBC驱动的用于建立连接的密码 url 传递给JDBC驱动的用于建立连接的URL driverClas ...