tensorflow简单神经网络预测MNIST数据集

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

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

# 模型的输入和输出
'''模型的输入x是一个22维的浮点数张量。它的大小为shape=[None, 784],
其中784是一张展平的MNIST图片的维度。None表示其值不固定。输出y_也
是一个22维张量,它的每一行都是一个10维的one-hot向量,用来表示对应的MNIST图片的类别。
'''
x = tf.placeholder(tf.float32, shape=[None, 784])
y_ = tf.placeholder(tf.float32, shape=[None, 10])

# 模型的权重和偏移量
'''
y_和x分别表示上述模型的输入和输出。W是一个784∗10的矩阵,因为输入有784个特征,同时有10个输出值。
b是一个10维的向量,是因为输出有10个分类。'''
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))


with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    '''把向量化后的图片x和权重矩阵W相乘,加上偏移量b,然后计算每个分类的softmax概率值'''
    y = tf.nn.softmax(tf.matmul(x, W) + b)
    '''为训练指定损失函数,损失函数是用来评估模型一次预测的好与坏的。在这里使用目标
    类别和预测类别之间的交叉熵作为我们的损失函数。其中y_表示目标类别,也就是真实值。
    y是预测类别,就是模型的输出值。
    '''
    cross_entropy = -tf.reduce_sum(y_*tf.log(y))

# 训练
    '''这里使用梯度下降法来进行优化,即让损失函数的值下降,步长为0.01。然后通过循环,
    不断地训练模型。每次循环,都会从训练集中加载50个样本。'''
    train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
    for i in range(1000):
        batch = mnist.train.next_batch(50)
        train_step.run(feed_dict={x: batch[0], y_: batch[1]})

# 测试
    correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1)) #这里返回一个布尔数组,形如[True, False, True]
    '''将布尔数组转换为浮点数,并取平均值,如上布尔数组可以转换为[1, 0, 1],计算平均值为0.667'''
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
    print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))

你可能感兴趣的:(tensorflow)