引言
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
首先获取软件包的列表,在命令行键入命令
再安装 python 环境,在命令行键入命令
sudo apt-get install python
再依次安装 Tensorflow 环境的依赖包,依次在命令行键入如下命令:
sudo apt-get install python-pip
sudo 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 命令运行代码后运行代码后,就会在控制台上看到自己刚刚训练的模型,对测试数字识别的准确率了。
——————
相关阅读推荐:
机器学习进阶笔记之十 | 那些 TensorFlow 上好玩的黑科技
机器学习进阶笔记之九 | 利用 TensorFlow 搞定「倒字验证码」
机器学习进阶笔记之八 | TensorFlow 与中文手写汉字识别
机器学习进阶笔记之六 | 深入理解 Fast Neural Style
机器学习进阶笔记之五 | 深入理解 VGG\Residual Network
机器学习进阶笔记之二 | 深入理解 Neural Style
关于作者:
杨鸿渐( ),UCloud 应用创新部深度学习研发工程师。
在校期间参与过国家自然科委 “863 项目” 论文查重项目,其中做过基于知识图谱的人选推荐。工作期间,参与过智能图片鉴黄项目及 AI 平台搭建。学习过程中,对 Tensorflow 及 Keras 深度学习框架很有兴趣,平时会写写爬虫和看看算法原理,有时也会去参加一些数据算法比赛。生活中,喜欢尝试新的事物和活动,没事练练拳击和吉他。
———征稿的分割线———
如果你也有一些技术实践经验想分享给大家,欢迎投稿给我们:)
UCloud 机构号将提供 300 云服务代金券赞助 + 500 元 / 篇的转载费 + 全技术渠道推广资源!
征稿范围
题材不限,与「技术」及「云」相关即可,但文章不得少于 500 字,图文并茂为佳。可以是:
- 不同云厂商产品使用体验及数据评测;
- 项目部署到云平台前后数据分析对比;
- 云上迁移 / 部署过程遇到的问题及解决方案;
- 其他云上部署经验;
「UCloud 机构号」将独家分享云计算领域的技术洞见、行业资讯以及一切你想知道的相关讯息。
欢迎提问 & 求关注 o(////▽////)q~