15

tensorflow入门学习,对前面几节,MINST手写数字识别的总结(五)

 3 years ago
source link: https://blog.popkx.com/tensorflow-study-summary-of-recognization-of-minst-handwritten-digit/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

tensorflow入门学习,对前面几节,MINST手写数字识别的总结(五)

发表于 2018-06-24 23:06:07   |   已被 访问: 263 次   |   分类于:   tensorflow   |   暂无评论

作为初学者,对第二节第三节理解并不是完全透彻,所以本节先停一下脚步,对前面几节做一些总结和巩固。

在第二节,我们将 28x28 大小的图片拉成 784 的一维数据,这丢失了图片的二维结构方面的信息,在图片识别中,二维空间结构也是非常重要的信息。不过,对于第二节中的例子而言,因为模型非常简单,丢弃空间结构信息,可以简化问题。第三节的卷积网络,就充分利用了图片的二维空间结构信息。

softmax 线性回归(Regression)非常适合分类模型,它会对每一种类估算一个概率,例如在 MINST 手写数字识别中,预测数字 3 的概率为 0.87,数字 5 的概率为 0.18,那么显然该次识别结果是 3。当处理多分类任务时,通常使用 softmax 线性回归模型。即使是第三节中的卷积网络模型,最后全连接层时,也是softmax 线性回归。

softmax regression 工作原理非常简单,将可以判定为某类的特征全部加在一起,然后将这些特征转化为判定是这一类的概率(例如归一操作)。

tensorflow 常常是先建立模型,最后在 session 里执行训练等计算内容的。输入部分可以先用 holder 预留数据位,然后再通过 feed 传入数据,整个第二节就是这么干的。

...
x = tf.placeholder("float", [None, 784])
...
y_ = tf.placeholder("float", [None,10])
...
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys}) # feed 数据

网络模型的的权值和偏置,记忆着训练结果,在 tensorflow 中用 variable 存储模型参数。这是因为 tensor 存储的数据在使用后就会释放,而 variable 在模型训练中是长久存在的。权值和偏置的初始值也是非常重要的,不过,第二节介绍的模型非常简单,所以全部初始化为 0 了。而第三节,则加入了一些特殊处理:

# 加入一点噪声是为了避免 0 梯度
def weight_variable(shape):
    initial = tf.truncated_normal(shape, stddev=0.1)
return tf.Variable(initial)

# 使用一个较小正数初始化,可以避免神经元输出恒 0(死神经元)
def bias_variable(shape):
    initial = tf.constant(0.1, shape=shape)
return tf.Variable(initial)

定义好训练网络后,需要指定 loss 函数,作为训练的依据。最后,再指定训练方式,如 train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy),即可建立好 tensorflow 模型。需要说明的是,此时计算并没有实际发生,只有在调用 run 方法,并且 feed 数据后,计算才开始。tensorflow 的主要功能不仅仅是建立模型,它还能自动的计算梯度,训练网络,更新权值和偏置。

阅读更多:   tensorflow


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK