机器学习进阶笔记之十一 | 利用TensorFlow实现智能数字识别 | U刻
  • 机器学习进阶笔记之十一 | 利用TensorFlow实现智能数字识别

    栏目:技术分享

    引言

    TensorFlow是Google基于DistBelief进行研发的第二代人工智能学习系统,被广泛用于语音识别或图像识别等多项机器深度学习领域。其命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow代表着张量从图象的一端流动到另一端计算过程,是将复杂的数据结构传输至人工智能神经网中进行分析和处理的过程。

    TensorFlow完全开源,任何人都可以使用。可在小到一部智能手机、大到数千台数据中心服务器的各种设备上运行。
    『机器学习进阶笔记』系列将深入解析TensorFlow系统的技术实践,从零开始,由浅入深,与大家一起走上机器学习的进阶之路。

    目录

    1. Mnist数字识别项目介绍

    2. 准备工作

    申请一台UCloud云主机
    配置Tensorflow环境

    3. 编写你的第一个Tensorflow项目——Mnist数字识别

    训练你的模型
    测试你的模型

    Mnist数字识别介绍

    人工智能技术已经逐渐渗透到生活中的方方面面,从大名鼎鼎的AlphaGo,再到身边的广告展示、新闻智能推荐等,人工智能技术已经被广泛运用于各行各业。近年来,人工智能技术在图像(物体识别、人脸识别等)、自然语言(语音识别、翻译、对话机器人)、智能医疗、智能推荐(广告、新闻、视频)等领域取得了飞速的发展。

    在图像识别领域中,随着人类社会的信息量成几何级数增长,如果对图像的识别还仅仅是用人类的肉眼去判断的话,那其庞大的工作量对于我们人类来说,就是一个不可能完成的任务。但在今天,随着人工智能技术的快速发展,基于深度学习研究理论的技术日趋成熟并广泛应用,对海量图像的识别进行自动智能化识别,已成为了现实。

    Mnist数字识别项目就正是属于图像识别领域,Mnist是一个入门级的计算机视觉数据集,它包含各种手写数字图片,如下图图1所示。

    图1

    它也包含每一张图片对应的标签,告诉我们这个是数字几。比如,上图图1所示,这四张图片的标签分别是5、0、4、1。

    在这个项目中,我们将通过深度学习通用框架Tensorflow,训练一个深度学习模型用于预测图片里面的数字是几。

    通过这个项目,你除了可以见识计算机可以自动智能识别出图片中的数字是几,更重要的是,你可以了解深度学习框架Tensorflow的工作流程和深度学习的基本概念。本文档将从开始的准备工作到最后的项目部署一步一步手把手的教你完成这个项目,也将很详细地介绍所用代码的实现原理,让你对深度学习工作流程有个完整的体会。

    好,相信你看到这里已经迫不及待摩拳擦掌跃跃欲试了吧?那我们将进入文档的下一步,一起来完成这个有趣的数字识别项目吧!Let’s go!

    准备工作

    1. 申请一台UCloud云主机

    如下图图2所示,首先在你的浏览器地址上输入网址https://www.ucloud.cn/ 进入UCloud官网首页,然后点击页面右上方的登陆按钮(如未注册,需先注册)。

    图2

    进入用户登陆页面,填写你的用户名及密码,如下图图3所示。

    图3

    登录以后,选择产品的云主机UHost一栏,点击立即使用按钮,如下图图4所示。

    图4

    在点击后出现的页面中,选择主机管理一栏的创建主机按钮,如下图图5所示。

    图5

    在随后出现的页面中配置你当前申请的云主机的相关参数,最后根据页面右边栏的所需费用价格点击立即购买按钮进行购买,如下图图6所示。

    图6

    到现在为止你就已经申请好一台UCloud的云主机了,现在就可以启动并登陆你刚刚创建好的UCloud的云主机了,如下图图7所示。

    图7

    2. 配置Tensorflow环境

    进入终端,如下图图8所示。

    图8

    首先获取软件包的列表,在命令行键入命令

    sudo apt-get update

    再安装python环境,在命令行键入命令

    sudo apt-get install python

    再依次安装Tensorflow环境的依赖包,依次在命令行键入如下命令:

    sudo apt-get install python-pipsudo apt-get install python-dev

    wget https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.11.0-cp27-none-linux_x86_64.whl

    sudo pip install tensorflow-0.11.0-cp27-none-linux_x86_64.whl

    如果没有出现什么错误提示,那么到现在为止,Tensorflow环境就已经搭建好了。

    编写你的第一个Tensorflow项目——Mnist数字识别

    1. 训练你的模型

    在名为Trainmodel.py文件下键入如下代码:

    from __future__ import absolute_import
    from __future__ import division
    from __future__ import print_function
    # Import data
    from tensorflow.examples.tutorials.mnist import input_data
    import tensorflow as tf
    flags = tf.app.flags
    FLAGS = flags.FLAGS
    flags.DEFINE_string('data_dir','/tmp/data/', 'Directory for storing data')
    mnist = input_data.read_data_sets(FLAGS.data_dir, one_hot=True)
    sess = tf.InteractiveSession()

    # Create the model
    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)

    # Define loss and optimizer
    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)

    saver = tf.train.Saver()

    # Train
    tf.initialize_all_variables().run()
    for i in range(1000):
    batch_xs, batch_ys = mnist.train.next_batch(100)
    train_step.run({x: batch_xs, y_: batch_ys})
    saver.save(sess,"./TFMnist_model")

    在Trainmodel.py文件目录下,命令行使用python Trainmodel.py命令运行代码后,会在项目目录下生成训练模型文件,一个是名为TFMnist_model文件,另一个是名为TFMnist_model的meta文件,还有一个是checkpoint文件。至此为止,你的训练模型就已经训练完成了。

    2. 测试你的模型

    在名为Testmodel.py文件下键入如下代码:

    import tensorflow as tf
    # Import data
    from tensorflow.examples.tutorials.mnist import input_data
    flags = tf.app.flags
    FLAGS = flags.FLAGS
    flags.DEFINE_string('data_dir','/tmp/data/', 'Directory for storing data')mnist =input_data.read_data_sets(FLAGS.data_dir, one_hot=True)

    # Create the model
    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)

    # Define loss and optimizer
    y_ = tf.placeholder(tf.float32, [None,10])

    saver = tf.train.Saver()

    with tf.Session() as sess:
    saver.restore(sess, "./TFMnist_model")
    correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
    print('Testing------------\n')
    print('test accuracy: ')
    print(accuracy.eval({x: mnist.test.images, y_: mnist.test.labels}

    在Testmodel.py文件目录下,命令行使用python Testmodel.py命令运行代码后运行代码后,就会在控制台上看到自己刚刚训练的模型,对测试数字识别的准确率了。

    8