用TensorFlow进行手写数字识别

http://ufldl.stanford.edu/wiki/index.php/Softmax%E5%9B%9E%E5%BD%92

softmax函数将n个非负的值归一化为0~1之间的值，形成一个概率分布。

http://colah.github.io/posts/2015-09-Visual-Information/

``````from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

# Import data
mnist = input_data.read_data_sets('input_data/', one_hot=True)

# Create the model
x = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.matmul(x, W) + b
y_ = tf.placeholder(tf.float32, [None, 10])

# Define loss and optimizer

# The raw formulation of cross-entropy,
#
#   tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(tf.nn.softmax(y)),
#                                 reduction_indices=[1]))
#
# can be numerically unstable.
#
# So here we use tf.nn.softmax_cross_entropy_with_logits on the raw
# outputs of 'y', and then average across the batch.

cross_entropy = tf.reduce_mean(
tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))

sess = tf.InteractiveSession()

tf.global_variables_initializer().run()

# Train
for _ in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

# Test trained model
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print(sess.run(accuracy, feed_dict={x: mnist.test.images,
y_: mnist.test.labels}))
``````

`````` mnist = input_data.read_data_sets('input_data/', one_hot=True)
``````

`'input_data/'`是你存放下载的数据集的文件夹名。

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

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

``````cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))
``````

``````cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(tf.nn.softmax(y)), reduction_indices=[1]))
``````

`y_ * tf.log(tf.nn.softmax(y)`做的事情就是计算每个样本的`cross-entropy`，因为这样算数值不稳定，所以换成了`tf.nn.softmax_cross_entropy_with_logits`这个方法。

``````train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
``````

``````for _ in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
``````

``````correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))
``````

1 篇文章1 人订阅

0 条评论

3417

3565

9379

3546

924

3649

4495

56613

3415

4617