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

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

在第二节,我们将 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
添加新评论

icon_redface.gificon_idea.gificon_cool.gif2016kuk.gificon_mrgreen.gif2016shuai.gif2016tp.gif2016db.gif2016ch.gificon_razz.gif2016zj.gificon_sad.gificon_cry.gif2016zhh.gificon_question.gif2016jk.gif2016bs.gificon_lol.gif2016qiao.gificon_surprised.gif2016fendou.gif2016ll.gif