MNIST数据集入门

简单的训练MNIST数据集 (0-9的数字图片)

详细地址(包括下载地址):http://www.tensorfly.cn/tfdoc/tutorials/mnist_beginners.html

# -*- coding: utf-8 -*-
import tensorflow as tf
import numpy as np
import input_data  # 需要下载数据集(包括了input_data)
# 加载数据集 mnist
= input_data.read_data_sets("MNIST_data/", one_hot=True) # x: 任意数量的MNIST图像,每一张图展平成784维的向量。我们用2维的浮点数张量来表示这些 # 图,这个张量的形状是[None,784 ]。(这里的None表示此张量的第一个维度可以是任何 # 长度的[60000, 784]。) x = tf.placeholder("float", [None, 784]) # 图片设为“xs”,把这些标签设为“ys” # softmax模型可以用来给不同的对象分配概率 W = tf.Variable(tf.zeros([784, 10])) # 28*28, 0-9 b = tf.Variable(tf.zeros([10])) # 0-9 # 构建模型 y = tf.nn.softmax(tf.matmul(x, W) + b) # y概率 # 训练构建的模型 # 先定义指标评估模型好坏(指标称为 成本cost,损失loss。小化这个指标) # 成本函数“交叉熵”cross-entropy。 # 计算交叉熵 需要添加新的占位符 y_: 实际分布one-hot [1,0,0,0,0,0,0,0,0,0] ?? y_ = tf.placeholder("float", [None, 10]) # 交叉熵 cross_entropy = -tf.reduce_sum(y_ * tf.log(y)) # tf的优化算法,根据交叉熵降低指标(成本,损失) # 梯度算法,0.01的学习率不断地最小化交叉熵(指标) train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy) # 运行模型前,初始化创建的变量 init = tf.initialize_all_variables() # 启动init sess = tf.Session() sess.run(init) # 开始训练模型1000次 for i in range(1000): # 获得100个批处理数据点 batch_xs, batch_ys = mnist.train.next_batch(100) # 进行梯度算法 sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys}) # 评估模型tf.argmax(x, 1) # 给出某个tensor对象在某一维上的其数据最大值所在的索引值。由于标签向量是由0,1组 # 成,因此最大值1所在的索引位置就是类别标签,比如tf.argmax(y,1)返回的是模型对于 # 任一输入x预测到的标签值,而 tf.argmax(y_,1) 代表正确的标签,我们可以用 # tf.equal 来检测我们的预测是否真实标签匹配(索引位置一样表示匹配)。 current_prediction = tf.equal(tf.argmax(y, 1), tf.arg_max(y_, 1)) # 其结果为bool值 [True, False, ...] # 为了确定正确预测项的比例,我们可以把布尔值转换成浮点数,然后取平均值 accuracy = tf.reduce_mean(tf.cast(current_prediction, "float")) # 运行accuracy print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})) # 结果约为 91% 左右

猜你喜欢

转载自www.cnblogs.com/tangpg/p/9173845.html
今日推荐