【典型案例】用 Notebook 实现手写数字识别

  • 2019 年 11 月 11 日
  • 筆記

场景背景

手写数字识别是图像识别领域基本任务之一,旨在通过机器学习或深度学习算法将每张手写数字图片分类到0 – 9的数字标签中。在海量的手写数字图像数据集中,MNIST 数据集被学术界、工业界广泛研究。

本文通过智能钛机器学习平台提供的 Notebook,利用 TensorFlow 框架构建一个简单的神经网络来实现 MNIST 手写数字识别。通过本文的学习,您可了解到如何通过智能钛机器学习平台实现您自己的代码。

数据集介绍

用户可从 MNIST 官网 下载 MNIST 数据集,该数据集由来自250个不同人手写的数字构成,共包含60,000个训练数据,10,000个测试数据,每个数据都是一张28px * 28px大小的灰度图像,该图像空白像素标记为0,有笔迹的地方用0 – 1之间的数值标记笔迹颜色的深浅。手写数字图像示例如下:

整体流程

在智能钛机器学习平台提供的 Notebook 中完成手写数字识别的任务,我们需要完成以下几个步骤:

1.新建 Notebook 容器

2.在 Notebook 中,创建 MNIST 手写数字识别项目

  • 创建 Python 文件
  • 从 MNIST 官网下载数据集并上传到项目文件夹中

3.利用 TensorFlow 实现手写数字识别:

  • 安装并导入所需依赖包
  • 加载 MNIST 数据集
  • 数据集可视化展示
  • 构建手写数字识别模型
  • 模型评估输出模型准确率

详细流程

新建 Notebook 容器

1.登录智能钛机器学习平台控制台后,单击顶层菜单栏的【Notebook】,页面跳转至 Notebook 容器列表页面。单击【新增】,配置容器参数:

  • 容器名称:MNIST 手写数字识别
  • 框架选择:tensorflow/1.12
  • 资源选择:后付费/CPU/2核4G内存
  • 存储桶:此处请选择您自己在 COS 上的存储桶

2.待 Notebook 容器创建完成后状态为:运行中,单击【打开】进入 Notebook 操作页面

创建 MNIST 手写数字识别项目

1.在 Notebook 操作页面,选择【Python3】,进入项目后,将项目重命名为:MNIST.ipynb

2.在 MNIST.ipynb 的同级目录处,新建文件夹【MNIST_data】,并将 MNIST 官网 提供的四个数据集下载后上传至该文件夹中:

  • train-images-idx3-ubyte.gz
  • train-labels-idx1-ubyte.gz
  • t10k-images-idx3-ubyte.gz
  • t10k-labels-idx1-ubyte.gz

利用 TensorFlow 实现 MNIST 手写数字识别

1.在 Notebook 中安装并导入所需依赖包

<!–您可直接复制以下所有代码块到 Notebook 中运行–>

! pip install --user --upgrade pip  ! pip install --user tensorflow    import matplotlib.pyplot as plt  import tensorflow as tf  from tensorflow.examples.tutorials.mnist import input_data  from tensorflow.examples.tutorials.mnist import input_data

2.加载 MNIST 数据集

mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

3.可视化查看数据内容

选择数据集中的一个示例打印出来,查看数据内容。

说明:此处打印的数据每次都是随机的,可能内容不一样。

为更直接查看数据图像内容,我们可将数据 reshape 成28 * 28的矩阵,然后打印一个黑白图片(Greys),同时输出查看该图片的标签(数字“8”的标签会在10维向量中第9位设置为1,其余为0)

  im = mnist.train.images[0].reshape(28, 28)    plt.imshow(im, cmap='Greys')    plt.show()    print(mnist.train.labels[0])

4.搭建手写数字识别模型

# 模型构建  sess = tf.InteractiveSession()  x = tf.placeholder(tf.float32, [None, 784])  W = tf.Variable(tf.zeros([784,10]))  b = tf.Variable(tf.zeros([10]))    y = tf.nn.softmax(tf.matmul(x,W) + b)    y_ = tf.placeholder(tf.float32, [None,10])  cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y),reduction_indices=[1]))  train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)    # 模型训练  tf.global_variables_initializer().run()    for i in range(1000):      batch_xs, batch_ys = mnist.train.next_batch(100)      train_step.run({x: batch_xs, y_: batch_ys})

5.模型评估

correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))  accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))    print('MNIST手写数字模型准确率:')  print(accuracy.eval({x: mnist.test.images, y_: mnist.test.labels}))

注意:由于随机因素的存在,模型每次运行准确率不一定完全一致

模型准确率输出可参考下图示例:

腾讯云一站式机器学习平台智能钛TI-ONE试运营阶段限时0折,欢迎大家积极试用。

https://cloud.tencent.com/product/tio

更多优质技术文章请关注官方知乎机构号:

https://www.zhihu.com/org/teng-xun-zhi-neng-tai-ji-qi-xue-xi-ping-tai/activities

更多优质技术文章请关注官方微信公众号: