手写数字识别(mxnet官网例子)

上传人:y****3 文档编号:12929286 上传时间:2020-06-03 格式:DOC 页数:9 大小:289.50KB
返回 下载 相关 举报
手写数字识别(mxnet官网例子)_第1页
第1页 / 共9页
手写数字识别(mxnet官网例子)_第2页
第2页 / 共9页
手写数字识别(mxnet官网例子)_第3页
第3页 / 共9页
点击查看更多>>
资源描述
.手写数字识别简介:通过MNIST数据集建立一个手写数字分类器。(MNIST对于手写数据分类任务是一个广泛使用的数据集)。1.前提:mxnet 0.10及以上、python、jupyter notebook(有时间可以jupyter notebook的用法,如:PPT的制作)pip install requests jupyter python下jupyter notebook的安装2.加载数据集:import mxnet as mxmnist = 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 = 100train_iter=mx.io.NDArrayIter(mnisttrain_data,mnisttrain_label, batch_size, shuffle=True)val_iter = mx.io.NDArrayIter(mnisttest_data, mnisttest_label, batch_size)初始化MNIST数据集的数据迭代器(2个:训练数据+测试数据)3.训练+预测:(2种方法) (CNN优于MLP) 1)传统深度神经网络结构MLP(多层神经网络)MLPMXNET的符号接口为输入的数据创建一个占位符变量 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网络结构以上,已完成了数据迭代器和神经网络的申明,下面可以进行训练。超参数:处理大小、学习速率import logginglogging.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(mnisttest_data, None, batch_size)prob = mlp_model.predict(test_iter)assert prob.shape = (10000, 10)计算每一个测试图像可能的预测得分(probij第i个测试图像包含j输出类)test_iter = mx.io.NDArrayIter(mnisttest_data, mnisttest_label, batch_size) 预测精度的方法acc = mx.metric.Accuracy()mlp_model.score(test_iter, acc)print(acc)assert acc.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(mnisttest_data, None, batch_size)prob = lenet_model.predict(test_iter)test_iter = mx.io.NDArrayIter(mnisttest_data, mnisttest_label, batch_size)acc = mx.metric.Accuracy() 预测LeNet的准确性lenet_model.score(test_iter, acc)print(acc)assert acc.get()1 0.98使用CNN,我们能够正确地预测所有测试图像的98%左右。附:完整代码1)MLPimport mxnet as mxmnist = mx.test_utils.get_mnist()batch_size = 100train_iter = mx.io.NDArrayIter(mnisttrain_data, mnisttrain_label, batch_size, shuffle=True)val_iter = mx.io.NDArrayIter(mnisttest_data, mnisttest_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)import logginglogging.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(mnisttest_data, None, batch_size)prob = mlp_model.predict(test_iter)assert prob.shape = (10000, 10)test_iter = mx.io.NDArrayIter(mnisttest_data, mnisttest_label, batch_size)acc = mx.metric.Accuracy()mlp_model.score(test_iter, acc)print(acc)assert acc.get()1 0.962)CNNimport mxnet as mxmnist = mx.test_utils.get_mnist()batch_size = 100train_iter = mx.io.NDArrayIter(mnisttrain_data, mnisttrain_label, batch_size, shuffle=True)val_iter = mx.io.NDArrayIter(mnisttest_data, mnisttest_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(mnisttest_data, None, batch_size)prob = lenet_model.predict(test_iter)test_iter = mx.io.NDArrayIter(mnisttest_data, mnisttest_label, batch_size)acc = mx.metric.Accuracy()lenet_model.score(test_iter, acc)print(acc)assert acc.get()1 0.98.
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 临时分类 > 职业技能


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!