tensorflow-gpu版实现简单MNIST手写字识别1

-- 环境:win10, jupyter notebook/pycharm, python3.x, tensorflow1.3.0-gpu
环境搭建看上一章

首先手写字图片加载

Tensorflow为我们提供了一个方便的封装,可以直接加载MNIST数据成我们期望的格式,代码如下:

from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("MNIST_data/",one_hot = True)

这样加载的mnist数据集中,可以得到训练集有55000个样本,测试集有10000个样本,同时验证集有5000个样本,每个样本都有对应的[0, 0 ,0, 0 ,0 ,0 ,0 ,0 ,0 0 ]10维的向量label,这里是对10个种类进行了one-hot编码。


手写字母灰度信息

MNIST训练集数据label

这里数据准备好了,接下来就是设计算法。

Softmax Regression算法模型

我们的数字都是0-9之间的,所以一共有10个类别,当我们的模型对一张图片预测时,Softmax Regression会对每一种类别估算一个概率:比如预测数字3的概率为80%,是数字5的概率为5%,最后取概率最大的数字作为模型的输出结果。

  • 特征公式:


    特征公式

i代表第i类,j代表一张图片的第j个像素,bi是bias,顾名思义就是这个数据本身的一些倾向

  • 对所有特征计算softmax


    softmax(x)

    简单说就是计算一个exp函数,然后再进行标准化(让所有类别输出的概率值和为1)

  • 判定为第i类的概率可由下面的公式得到


    softmax(x)i
softmax regression流程
softmax Regression元素乘法示例
softmax Regression矩阵乘法示例

其实简洁的公式可以有下面这个表达:

y = softmax(Wx + b)

  • 使用tensorflow实现Softmax Ragression

首先导入TensorFlow库,并创建一个新InteractiveSession,使用这条命令会将这个Session注册为默认的session,之后的运算也默认跑在这session里,不同的session之间的数据运算应该都是相互独立的,接下来,就是创建一个Placeeholder,即输入数据的地方,Placeholder的第一个参数是数据的类型,第二个参数[None, 784]代表tensor的shape,也就是数据的尺寸,这里None代表不限条数的输入,784代表每条输入是一个784维的向量。

import tensorflow as tf
sess = tf.InteractiveSession()
x = tf.placeholder(tf.float32, [None, 784])

接下来要给Softmax Regression模型中的weights和biases创建Variable对象,Variable是用来存储模型参数的,不同于存储数据对的tensor一旦使用掉就会消失, Variable在模型训练中被更新。将weight和biases全部初始化为0因为模型训练时会自动学习合适、 的值,所以对这个简单模型来说初始化值不太重要。不过对复杂的卷积网络,循环网络或者比较深的 全连接网络,初始化的方法就比较重要,甚至可以说至关重要,注意这里W的shape是 [784, 10],784是特征的维数,而10代表有10类,因为Lable在one-hot编码后是10维的向量。

W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))

接下来就是实现Softmax Regression 算法,公式y = softmax(Wx + b)

y = tf.nn.softmax(tf.matmul(x, W) + b)

#softmaax是tf.nn下面的一个函数,而tf.nn则包含了大量神经网络的组    件,tf.matmul
#是Tensorflow中的矩阵乘法函数

loss function

为了训练模型,我们需要定义一个loss funcation来描述对问题的分类精度。

很多问题通常使用Cross-entropy作为loss-funcation,tensorflow中定义Cross-entropy,通常可用它来判断模型对真实概率分布估计的准确程度。


Cross-entropy
#在tensorflow中定义Cross-entropy
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)

下一步使用Tensorflow的全局参数初始化器tf.global_variables_initializer,

#并直接执行它的run方法
tf.global_variables_initializer().run()

最后一步

开始迭代地执行训练操作train_step.这里每次随机从训练中取出100条样本构成 一个mini-batch,并feed给placeholder,然后调用train_stepd对这些样本进行训练,使用一小部分样本进行训练称为随机梯度下降 与每次使用全部样本的传统的梯度下降对应,如果每次训练使用全部样本,计算量太大 有时也不容易挑出局部最优。因此,对于大部分机器学习问题,我们都只使用一小部分数据进行随机梯度下降 ,这种做法绝大多数数时候会比全部样本训练的收敛速度快很多。

for i in range(100000):
    batch_xs, batch_ys = mnist1.train.next_batch(1000)
    train_step.run({x:batch_xs, y_:batch_ys})

现在训练已经完成了,接下来就可以对模型的准确率进行验证。下面代码中的tf.argmax是从一个tensor中寻找最大值的序号,tf.argmax(y,1)就是求各个预测的数字中概率最大的那个,而tf.argmax(y_,1)则是找样本的真实数字类别。而tf.equal方法则用来判断预测的数字类别是否是正确的类别,最后返回计算分类是否正确的操作correct_predition。

correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print(accuracy.eval({x:mnist1.test.images, y_: mnist1.test.labels}))
准确率
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容