手写数字识别mxnet官网例子.docx

上传人:b****5 文档编号:5721648 上传时间:2022-12-31 格式:DOCX 页数:7 大小:236.37KB
下载 相关 举报
手写数字识别mxnet官网例子.docx_第1页
第1页 / 共7页
手写数字识别mxnet官网例子.docx_第2页
第2页 / 共7页
手写数字识别mxnet官网例子.docx_第3页
第3页 / 共7页
手写数字识别mxnet官网例子.docx_第4页
第4页 / 共7页
手写数字识别mxnet官网例子.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

手写数字识别mxnet官网例子.docx

《手写数字识别mxnet官网例子.docx》由会员分享,可在线阅读,更多相关《手写数字识别mxnet官网例子.docx(7页珍藏版)》请在冰豆网上搜索。

手写数字识别mxnet官网例子.docx

手写数字识别mxnet官网例子

手写数字识别

简介:

通过MNIST数据集建立一个手写数字分类器。

(MNIST对于手写数据分类任务是一个广泛使用的数据集)。

1.前提:

mxnet0.10及以上、python、jupyternotebook(有时间可以jupyternotebook的用法,如:

PPT的制作)

pipinstallrequestsjupyter——python下jupyternotebook的安装

2.加载数据集:

importmxnetasmx

mnist=mx.test_utils.get_mnist()

此时MXNET数据集已完全加载到内存中(注:

此法对于大型数据集不适用)

考虑要素:

快速高效地从源直接流数据+输入样本的顺序

图像通常用4维数组来表示:

(batch_size,num_channels,width,height)

对于MNIST数据集,因为是28*28灰度图像,所以只有1个颜色通道,width=28,height=28,本例中batch=100(批处理100),即输入形状是(batch_size,1,28,28)

数据迭代器通过随机的调整输入来解决连续feed相同样本的问题。

测试数据的顺序无关紧要。

batch_size=100

train_iter=mx.io.NDArrayIter(mnist['train_data'],mnist['train_label'],batch_size,shuffle=True)

val_iter=mx.io.NDArrayIter(mnist['test_data'],mnist['test_label'],batch_size)

——初始化MNIST数据集的数据迭代器(2个:

训练数据+测试数据)

3.训练+预测:

(2种方法)(CNN优于MLP)

1)传统深度神经网络结构——MLP(多层神经网络)

MLP——MXNET的符号接口

为输入的数据创建一个占位符变量

data=mx.sym.var('data')

data=mx.sym.flatten(data=data)

——将数据从4维变成2维(batch_size,num_channel*width*height)

fc1=mx.sym.FullyConnected(data=data,num_hidden=128)

act1=mx.sym.Activation(data=fc1,act_type="relu")

——第一个全连接层及相应的激活函数

fc2=mx.sym.FullyConnected(data=act1,num_hidden=64)

act2=mx.sym.Activation(data=fc2,act_type="relu")

——第二个全连接层及相应的激活函数

(声明2个全连接层,每层有128个和64个神经元)

fc3=mx.sym.FullyConnected(data=act2,num_hidden=10)

——声明大小10的最终完全连接层

mlp=mx.sym.SoftmaxOutput(data=fc3,name='softmax')

——softmax的交叉熵损失

MNIST的MLP网络结构

以上,已完成了数据迭代器和神经网络的申明,下面可以进行训练。

超参数:

处理大小、学习速率

importlogging

logging.getLogger().setLevel(logging.DEBUG)——记录到标准输出

mlp_model=mx.mod.Module(symbol=mlp,context=mx.cpu())

——在CPU上创建一个可训练的模块

mlp_model.fit(train_iter——训练数据

eval_data=val_iter,——验证数据

optimizer='sgd',——使用SGD训练optimizer_params={'learning_rate':

0.1},——使用固定的学习速率

eval_metric='acc',——训练过程中报告准确性batch_end_callback=mx.callback.Speedometer(batch_size,100),——每批次100数据输出的进展num_epoch=10)——训练至多通过10个数据

预测:

test_iter=mx.io.NDArrayIter(mnist['test_data'],None,batch_size)

prob=mlp_model.predict(test_iter)

assertprob.shape==(10000,10)

——计算每一个测试图像可能的预测得分(prob[i][j]第i个测试图像包含j输出类)

test_iter=mx.io.NDArrayIter(mnist['test_data'],mnist['test_label'],batch_size)——预测精度的方法

acc=mx.metric.Accuracy()

mlp_model.score(test_iter,acc)

print(acc)

assertacc.get()[1]>0.96

如果一切顺利的话,我们将看到一个准确的值大约是0.96,这意味着我们能够准确地预测96%的测试图像中的数字。

2)卷积神经网络(CNN)

卷积层+池化层

data=mx.sym.var('data')

conv1=mx.sym.Convolution(data=data,kernel=(5,5),num_filter=20)

tanh1=mx.sym.Activation(data=conv1,act_type="tanh")

pool1=mx.sym.Pooling(data=tanh1,pool_type="max",kernel=(2,2),stride=(2,2))

——第一个卷积层、池化层

conv2=mx.sym.Convolution(data=pool1,kernel=(5,5),num_filter=50)——第二个卷积层

tanh2=mx.sym.Activation(data=conv2,act_type="tanh")

pool2=mx.sym.Pooling(data=tanh2,pool_type="max",kernel=(2,2),stride=(2,2))

flatten=mx.sym.flatten(data=pool2)——第一个全连接层

fc1=mx.symbol.FullyConnected(data=flatten,num_hidden=500)

tanh3=mx.sym.Activation(data=fc1,act_type="tanh")

fc2=mx.sym.FullyConnected(data=tanh3,num_hidden=10)——第二个全连接层

lenet=mx.sym.SoftmaxOutput(data=fc2,name='softmax')——Softmax损失

LeNet第一个卷积层+池化层

lenet_model=mx.mod.Module(symbol=lenet,context=mx.cpu())

——在GPU上创建一个可训练的模块

lenet_model.fit(train_iter,

eval_data=val_iter,

optimizer='sgd',

optimizer_params={'learning_rate':

0.1},

eval_metric='acc',

batch_end_callback=mx.callback.Speedometer(batch_size,100),

num_epoch=10)

——训练(同MLP)

test_iter=mx.io.NDArrayIter(mnist['test_data'],None,batch_size)

prob=lenet_model.predict(test_iter)

test_iter=mx.io.NDArrayIter(mnist['test_data'],mnist['test_label'],batch_size)

acc=mx.metric.Accuracy()——预测LeNet的准确性

lenet_model.score(test_iter,acc)

print(acc)

assertacc.get()[1]>0.98

使用CNN,我们能够正确地预测所有测试图像的98%左右。

 

附:

完整代码

1)MLP

importmxnetasmx

mnist=mx.test_utils.get_mnist()

batch_size=100

train_iter=mx.io.NDArrayIter(mnist['train_data'],mnist['train_label'],batch_size,shuffle=True)

val_iter=mx.io.NDArrayIter(mnist['test_data'],mnist['test_label'],batch_size)

data=mx.sym.var('data')

data=mx.sym.flatten(data=data)

fc1=mx.sym.FullyConnected(data=data,num_hidden=128)

act1=mx.sym.Activation(data=fc1,act_type="relu")

fc2=mx.sym.FullyConnected(data=act1,num_hidden=64)

act2=mx.sym.Activation(data=fc2,act_type="relu")

fc3=mx.sym.FullyConnected(data=act2,num_hidden=10)

mlp=mx.sym.SoftmaxOutput(data=fc3,name='softmax')

importlogging

logging.getLogger().setLevel(logging.DEBUG)

mlp_model=mx.mod.Module(symbol=mlp,context=mx.cpu())

mlp_model.fit(train_iter,

eval_data=val_iter,

optimizer='sgd',

optimizer_params={'learning_rate':

0.1},

eval_metric='acc',

batch_end_callback=mx.callback.Speedometer(batch_size,100),

num_epoch=10)

test_iter=mx.io.NDArrayIter(mnist['test_data'],None,batch_size)

prob=mlp_model.predict(test_iter)

assertprob.shape==(10000,10)

test_iter=mx.io.NDArrayIter(mnist['test_data'],mnist['test_label'],batch_size)

acc=mx.metric.Accuracy()

mlp_model.score(test_iter,acc)

print(acc)

assertacc.get()[1]>0.96

2)CNN

importmxnetasmx

mnist=mx.test_utils.get_mnist()

batch_size=100

train_iter=mx.io.NDArrayIter(mnist['train_data'],mnist['train_label'],batch_size,shuffle=True)

val_iter=mx.io.NDArrayIter(mnist['test_data'],mnist['test_label'],batch_size)

data=mx.sym.var('data')

conv1=mx.sym.Convolution(data=data,kernel=(5,5),num_filter=20)

tanh1=mx.sym.Activation(data=conv1,act_type="tanh")

pool1=mx.sym.Pooling(data=tanh1,pool_type="max",kernel=(2,2),stride=(2,2))

conv2=mx.sym.Convolution(data=pool1,kernel=(5,5),num_filter=50)

tanh2=mx.sym.Activation(data=conv2,act_type="tanh")

pool2=mx.sym.Pooling(data=tanh2,pool_type="max",kernel=(2,2),stride=(2,2))

flatten=mx.sym.flatten(data=pool2)

fc1=mx.symbol.FullyConnected(data=flatten,num_hidden=500)

tanh3=mx.sym.Activation(data=fc1,act_type="tanh")

fc2=mx.sym.FullyConnected(data=tanh3,num_hidden=10)

lenet=mx.sym.SoftmaxOutput(data=fc2,name='softmax')

lenet_model=mx.mod.Module(symbol=lenet,context=mx.cpu())

lenet_model.fit(train_iter,

eval_data=val_iter,

optimizer='sgd',

optimizer_params={'learning_rate':

0.1},

eval_metric='acc',

batch_end_callback=mx.callback.Speedometer(batch_size,100),

num_epoch=10)

test_iter=mx.io.NDArrayIter(mnist['test_data'],None,batch_size)

prob=lenet_model.predict(test_iter)

test_iter=mx.io.NDArrayIter(mnist['test_data'],mnist['test_label'],batch_size)

acc=mx.metric.Accuracy()

lenet_model.score(test_iter,acc)

print(acc)

assertacc.get()[1]>0.98

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1