您的位置:首页 > 其它

TENSORFLOW官方文档-MNIST机器学习入门-训练模型

2017-01-09 19:34 323 查看

设置模型

1.为了计算交叉熵,需要添加一个新的占位符y_用于输入正确值:

y_ = tf.placeholder(“float”, [None,10])

2.交叉熵计算代码:

cross_entropy = -tf.reduce_sum(y_*tf.log(y))

交叉熵:

(1)非负性

(2)当预测值接近真实值时,代价函数趋近于0。

(3)克服方差代价函数更新权重过慢的问题。**当误差大时,权重更新快;当误差小时,权重更新慢。

reduce_sum: 计算tensor的所有元素的总和。

3.tensorflow可以自动地使用反响传播算法来有效确定变量是如何影响你想要最小化的那个成本值的。然后用所选择的优化算法来不断地修改变量以降低成本。

使tensorflow用梯度下降算法以0.01的学习速率最小化交叉熵。

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)

训练模型

1.添加一个初始化创建的变量的操作

init=tf.initialize_all_variables()

2.在一个session里启动模型,并且初始化变量:

sess=tf.Session()

sess.run(init)

3.训练模型

for i in range(1000):

batch_xs,batch_ys=mnist.train.next_batch(100)

sess.run(train_step,feed_dict={x:batch_xs,y_:batch_ys})

在每个循环中,随机抓取训练数据中的100个处理数据点,用这些数据点作为参数替换之前的x, y_ 占位符来运行train_step。

评估模型

1.找出那些预测正确的标签,这行代码会给我们一组布尔值。

correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))、

tf.argmax 是一个非常有用的函数,它能给出某个tensor对象在某一维上的其数据最大值所在的索引值。由于标签向量是由0,1组成,因此最大值1所在的索引位置就是类别标签,比如tf.argmax(y,1)返回的是模型对于任一输入x预测到的标签值,而 tf.argmax(y_,1) 代表正确的标签,我们可以用 tf.equal 来检测我们的预测是否真实标签匹配(索引位置一样表示匹配)。

2.把布尔值转换成浮点数,然后取平均值,来正确预测项的比例。

例如,[True, False, True, True] 会变成 [1,0,1,1] ,取平均值后得到 0.75。

accuracy = tf.reduce_mean(tf.cast(correct_prediction, “float”))

3.打印出正确率,大约为91%。

print sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息