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

mnist问题

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

TensorFlow

  • 可以按教程用Docker安装,也可以直接在Linux上安装
  • 你可能会担心,不用Docker的话怎么开那个notebook呢?其实notebook就在主讲人的Github页
  • 可以用这个Chrome插件:npviewer直接在浏览器中阅读ipynb格式的文件,而不用在本地启动iPython notebook
  • 我们的教程在这里:ep7.ipynb
  • 把代码从ipython notebook中整理出来:tflearn_mnist.py

代码分析

  • 下载数据集
mnist = learn.datasets.load_dataset('mnist')

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

在我的深度学习笔记看One-hot是什么东西

  • 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)
  • 这里展示了8个张图中,每个像素点(也就是feature)的weights,
  • 红色表示正的权重,蓝色表示负的权重
  • 作用越大的像素,它的颜色越深,也就是权重越大
  • 所以权重中红色部分几乎展示了正确的数字

Next steps

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PPV课数据科学社区

Keras入门必看教程(附资料下载)

导语:在这篇 Keras 教程中, 你将学到如何用 Python 建立一个卷积神经网络!事实上, 我们将利用著名的 MNIST 数据集, 训练一个准确度超过 9...

3657
来自专栏ATYUN订阅号

使用Apache MXNet分类交通标志图像

有许多深度学习的框架,例如TensorFlow、Keras、Torch和Caffe,Apache MXNet由于其在多个GPU上的可伸缩性而受到欢迎。在这篇博文...

4666
来自专栏新智元

猫狗大战识别准确率直冲 Kaggle Top 2%,手把手教你在 Keras 搭建深度 CNN

猫狗大战 数据集来自 kaggle 上的一个竞赛:Dogs vs. Cats,训练集有25000张,猫狗各占一半。测试集12500张,没有标定是猫还是狗。 ?...

5447

根据职位说明使用机器学习来检索相关简历

我们使用平均词嵌入(AWE)模型基于职业描述来检索相关的CV。我们在这提供了一个循序渐进的指南,通过使用西班牙语的文件(简历)训练,将已训练的领域词嵌入与预先训...

2598
来自专栏iOSDevLog

vid2vid 视频到视频转换vid2vid

Pytorch实现了我们的高分辨率(例如2048x1024)逼真的视频到视频转换方法。

1001
来自专栏IT派

Keras入门必看教程

导语:在这篇 Keras 教程中, 你将学到如何用 Python 建立一个卷积神经网络!事实上, 我们将利用著名的 MNIST 数据集, 训练一个准确度超过 9...

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

研究 | YOLO一眼就能认出你:看一个神经网络如何全视野实时检测目标

作者 | Joseph Redmon的 & Ali Farhadi 编译|AI100(rgznai100) YOLO全名You only look once(你...

34113
来自专栏PaddlePaddle

【图像分类】使用经典模型进行图像分类

场景文字识别 图像相比文字能够提供更加生动、容易理解及更具艺术感的信息,是人们转递与交换信息的重要来源。图像分类是根据图像的语义信息对不同类别图像进行区分,是计...

6655
来自专栏ATYUN订阅号

不用P图软件,TensorFlow pix2pix也能帮你打造出六块腹肌!

可视化结果是十分强大的。然而,在健身领域,要想清楚地看到未来的锻炼结果往往是很困难的。我们是否可以利用深度学习让人们更接近他们的个人健康目标,从而帮助他们设想未...

2674
来自专栏杨熹的专栏

TensorFlow-4: tf.contrib.learn 快速入门

学习资料: https://www.tensorflow.org/get_started/tflearn 相应的中文翻译: http://studyai.s...

3356

扫码关注云+社区