TF.Learn 手写文字识别

minist问题

  • 计算机视觉领域的Hello world
  • 给定55000个图片,处理成28*28的二维矩阵,矩阵中每个值表示一个像素点的灰度,作为feature
  • 给定每张图片对应的字符,作为label,总共有10个label,是一个多分类问题

Tensor Flow

  • 可以按教程用Docker安装,也可以直接在Linux上安装
  • 你可能会担心,不用Docker的话怎么开那个notebook呢?其实notebook就在主讲人的Github页(https://github.com/random-forests/tutorials)上
  • 可以用这个Chrome插件:npviewer(https://chrome.google.com/webstore/detail/open-in-nbviewer/ihlhlehlibooakiicbiakgojckpnlali?hl=zh-CN)直接在浏览器中阅读ipynb格式的文件,而不用在本地启动iPython notebook
  • 我们的教程在这里:ep7.ipynb(https://github.com/random-forests/tutorials/blob/master/ep7.ipynb)
  • 把代码从ipython notebook中整理出来:tflearn_mnist.py(https://github.com/ahangchen/GoogleML/blob/master/src/tflearn_mnist.py)

代码分析

下载数据集

mnist = learn.datasets.load_dataset('mnist')

恩,就是这么简单,一行代码下载解压mnist数据,每个img已经灰度化成长784的数组,每个label已经one-hot成长度10的数组

numpy读取图像到内存,用于后续操作,包括训练集(只取前10000个)和验证集

data = mnist.train.images labels = np.asarray(mnist.train.labels, dtype=np.int32) test_data = mnist. test.images test_labels = np.asarray(mnist.test.labels, dtype=np.int32) max_examples = 10000 data = data[:max_examples] labels = labels[:max_examples]

可视化图像

def display(i): img = test_data[i] plt.title('Example %d. Label: %d' % (i, test_labels[i])) plt.imshow(img.reshape((28, 28)), cmap=plt.cm.gray_r) plt.show()

用matplotlib展示灰度图

训练分类器

提取特征(这里每个图的特征就是784个像素值)

feature_columns = learn.infer_real_valued_columns_from_input(data)

创建线性分类器并训练

classifier = learn.LinearClassifier(feature_columns=feature_columns, n_classes=10) classifier.fit(data, labels, batch_size=100, steps=1000)

注意要制定n_classes为labels的数量

  • 分类器实际上是在根据每个feature判断每个label的可能性,
  • 不同的feature有的重要,有的不重要,所以需要设置不同的权重
  • 一开始权重都是随机的,在fit的过程中,实际上就是在调整权重
  • 最后可能性最高的label就会作为预测输出
  • 传入测试集,预测,评估分类效果
result = classifier.evaluate(test_data, test_labels)print result["accuracy"]

速度非常快,而且准确率达到91.4%

可以只预测某张图,并查看预测是否跟实际图形一致

# here's one it gets right print ("Predicted %d, Label: %d" % (classifier.predict(test_data[0]), test_labels[0])) display(0) # and one it gets wrong print ("Predicted %d, Label: %d" % (classifier.predict(test_data[8]), test_labels[8])) display(8)

可视化权重以了解分类器的工作原理

weights = classifier.weights_
a.imshow(weights.T[i].reshape(28, 28), cmap=plt.cm.seismic)

weight可视化

从上图可知:

1、这里展示了8个张图中,每个像素点(也就是feature)的weights,

2、红色表示正的权重,蓝色表示负的权重

3、作用越大的像素,它的颜色越深,也就是权重越大

4、所以权重中红色部分几乎展示了正确的数字

Next steps

  • TensorFlow Docker images(https://hub.docker.com/r/tensorflow/tensorflow/)
  • TF.Learn Quickstart(https://www.tensorflow.org/versions/r0.9/tutorials/tflearn/index.html)
  • MNIST tutorial(https://www.tensorflow.org/tutorials/mnist/beginners/index.html)
  • Visualizating MNIST(http://colah.github.io/posts/2014-10-Visualizing-MNIST/)
  • Additional notebooks(https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/docker/notebooks)
  • More about linear classifiers(https://www.tensorflow.org/versions/r0.10/tutorials/linear/overview.html#large-scale-linear-models-with-tensorflow)
  • Much more about linear classifiers(http://cs231n.github.io/linear-classify/)
  • Additional TF.Learn samples(https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/skflow)

Github工程地址 https://github.com/ahangchen/GoogleML

原文发布于微信公众号 - 人工智能LeadAI(atleadai)

原文发表时间:2017-09-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据挖掘DT机器学习

Tensorflow:基于LSTM轻松生成各种古诗

RNN不像传统的神经网络-它们的输出输出是固定的,而RNN允许我们输入输出向量序列。RNN是为了对序列数据进行建模而产生的。 样本序列性:样本间存在顺序关系,...

4666
来自专栏AI研习社

Github 项目推荐 | 100+ Chinese Word Vectors 上百种预训练中文词向量

该项目提供了不同表征(密集和稀疏)上下文特征(单词,ngram,字符等)和语料库训练的中文单词向量。开发者可以轻松获得具有不同属性的预先训练的向量,并将它们用于...

1702
来自专栏人工智能

使用Keras在训练深度学习模型时监控性能指标

Keras库提供了一套供深度学习模型训练时的用于监控和汇总的标准性能指标并且开放了接口给开发者使用。

1.8K10
来自专栏梦里茶室

Google机器学习笔记(七)TF.Learn 手写文字识别

mnist问题 计算机视觉领域的Hello world 给定55000个图片,处理成28*28的二维矩阵,矩阵中每个值表示一个像素点的灰度,作为feature...

2869
来自专栏AI科技大本营的专栏

一文解决图片数据集太少的问题:详解KerasImageDataAugmentation各参数

作者 | Professor ho 本文转自Professor ho的知乎专栏 图像深度学习任务中,面对小数据集,我们往往需要利用Image Data Aug...

4096
来自专栏ATYUN订阅号

怎样在Python的深度学习库Keras中使用度量

Keras库提供了一种在训练深度学习模型时计算并报告一套标准度量的方法。 除了提供分类和回归问题的标准度量外,Keras还允许在训练深度学习模型时,定义和报告你...

4388
来自专栏PaddlePaddle

【目标检测】SSD目标检测

场景文字识别 目标检测任务的目标是给定一张图像或是视频帧,让计算机找出其中所有目标的位置,并给出每个目标的具体类别。对于人类来说,目标检测是一个非常简单的任务。...

4939
来自专栏视觉求索无尽也

【Keras】Keras入门指南

在用了一段时间的Keras后感觉真的很爽,所以特意祭出此文与我们公众号的粉丝分享。 Keras是一个非常方便的深度学习框架,它以TensorFlow或Thea...

5572
来自专栏Petrichor的专栏

深度学习: Full Connection (全连接层)

在 Caffe 中,全连接层 的 type (层类型) 为 Inner Product 。 输出一个简单向量(把输入数据blobs的width和height...

6942
来自专栏专知

显存不足?PyTorch 显存使用分析与优化

面对动辄几百万几千万参数量的模型, GPU那连常规 U盘都比不过的显存, 真的是杯水车薪。相信大家在日常模型训练过程中,或多或少的总会遇见:

1K2

扫码关注云+社区