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 条评论
登录 后参与评论

相关文章

来自专栏Python小屋

使用决策树分类算法判断一下你的Python水平

决策树算法是一种常用的机器学习算法,既可以用于分类,也可以用于回归。决策树算法类似于程序设计语言中嵌套的多分支选择结构,根据不同的条件选择不同的分支路径,最终到...

642
来自专栏人工智能LeadAI

TF.Learn 手写文字识别

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

3506
来自专栏机器学习原理

深度学习——CNN(4)分析

1704
来自专栏云时之间

算法导论系列:贪心算法(2)

现在我们假设景点地图如上所示,从起点到下一个点都会有具有方向路径和相应的权重,我们可以使用矩阵进行表示,如下图所示:

831
来自专栏人工智能LeadAI

深度学习与TensorFlow:VGG论文复现

上一篇文章我们介绍了下VGG这一个经典的深度学习模型,今天便让我们通过使用VGG开源的VGG16模型去复现一下该论文.

1023
来自专栏吉浦迅科技

手撕深度学习算法(7):手撕LSTM后半部第八~九课(完结篇)

第八课 ? 第九课 ? 到这里,就是完整的LSTM算法的手撕过程。 Lady最近发现一篇不错的介绍LSTM算法的文章,大家可以点击阅读原文观看,可以协助各位理...

3497
来自专栏有趣的Python和你

sklearn调包侠之支持向量机

1168
来自专栏Python小屋

Python+sklearn使用朴素贝叶斯算法识别中文垃圾邮件

2、读取全部训练集,删除其中的干扰字符,例如【】*。、,等等,然后分词,删除长度为1的单个字。

1335
来自专栏数据科学与人工智能

【Python环境】python的Orange包实现机器学习与数据挖掘的分类问题

Orange是Python语言中一个强大的机器学习包,主要用于实现数据挖掘和有监督的机器学习,包括分类,回归等等。在Orange的使用过程中并不需要用户像使用S...

3529
来自专栏云时之间

算法导论系列:贪心算法(2)

现在我们假设景点地图如上所示,从起点到下一个点都会有具有方向路径和相应的权重,我们可以使用矩阵进行表示,如下图所示:

793

扫码关注云+社区