【TensorFlow实战——笔记】第3章:TensorFlow第一步_TensorFlow实现Softmax Regression识别手写数字

3.2 TensorFlow实现Softmax Regression识别手写数字

MNIST(Mixed National Institute of Standards and Technology database)是一个非常简单的机器视觉数据集,它由几万张28像素x28像素的只包含灰度值的手写数字组成。在机器学习领域,对MNIST手写数字的识别就像是编程语言里实现Hello World例子一样,是入门知识。

首先加载MNIST数据,然后查看mnist这个数据集,可以看到训练集有55000个样本,测试集有10000个样本,同时验证集有5000个样本。每一个MNIST数据单元有两部分组成:一张包含手写数字的图片和一个对应的标签label。下面的程序中,mnist.train.images就是训练数据集的图片,mnist.train.labels就是训练数据集的标签。

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
print(mnist.train.images.shape, mnist.train.labels.shape)
print(mnist.test.images.shape, mnist.test.labels.shape)
print(mnist.validation.images.shape, mnist.validation.labels.shape)

每一张图片是28像素x28像素大小的灰度图片,图像中白色的像素可以用0表示,有颜色的地方根据颜色深浅有0到1之间取值。我们把整个28x28=784个点展开成1维向量。下面是一张手写的1来举例。

我们的训练数据的特征是一个55000x784的Tensor,第一个维度是图片的编号,第二个维度是图片中像素点的编号。

同时,训练的数据label是一个55000x10的Tensor,这里是对10个种类进行了one-hot编码,label是一个10维的向量,只有一个值为1,其余为0。比如数字0,对应的label就是[1,0,0,0,0,0,0,0,0,0]。

Softmax回归模型介绍

当我们处理多分类任务时,通常需要使用Softmax Regression模型。即使是卷积神经网络或循环神经网络,如果是分类模型,最后一层也同样是Softmax Regression。它的工作原理很简单,将可以判定为某类的特征相加,然后将这些特征转化成为判定是这一类的概率。比如某个像素具有很强的证据说明这张图片不属于该类,那么相应的权值为负数,相反如果这个像素拥有有利的证据支持这张图片属于这个类,那么权值是正数。下图蓝色代表正的权重,红色代表负的权重。

可以用这些特征写成如下公式:

  1. 计算第i类的特征:i代表第i类,j代表一张图片的第j个像素。bi是额外的偏置量(bias)
  2. 对所有特征计算softmax:就是都计算一个exp函数,然后再进行标准化(让所有类别输出的概率值和为1)
  3. 判定为第i类的概率

如果将整个计算过程可视化,用下图表示:

如果将上图的连线变成公式:

最后将元素相乘变成矩阵乘法:

上述矩阵运算表达写成公式的话,可以用下面这样简洁的一行表达。

用TensorFlow实现Softmax回归模型

import tensorflow as tf
# 不同的session之间的数据和运算相互独立
sess = tf.InteractiveSession()
# [None, 784]代表tensor的shape,None代表不限条数输入,784代表每条输入是一个784维的向量
x = tf.placeholder(tf.float32, [None, 784])
# 创建weights和biases
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
# 实现 y = softmax(Wx+b)
y = tf.nn.softmax(tf.matmul(x, W) + b)
# 定义损失函数cross-entropy
y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
# 随机梯度下降SGD,并设置学习速率0.5,优化目标设定为cross-entropy,得到进行训练的操作train_step
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
# 使用全局参数初始化器,并执行run
tf.global_variables_initializer().run()
# 开始迭代执行训练操作train_step
for i in range(1000):
    batch_xs, batch_ys = mnist.train.next_batch(100)
    train_step.run({x: batch_xs, y_: batch_ys})

# 对模型准确率进行验证
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
# 统计全部样本预测的accuracy
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
# 打印计算模型在测试集上的准确率
print(accuracy.eval({x: mnist.test.images, y_: mnist.test.labels}))

以上流程做的事情分为4部分:

  1. 定义算法公式,也就是神经网络forward时的计算
  2. 定义loss,选定优化器,并指定优化器优化loss
  3. 迭代地对数据进行训练
  4. 在测试集或验证集上对准确率进行评测
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容