Tensorflow训练MNIST手写数字识别模型

来源:脚本之家  责任编辑:小易  

调用时,代码如下:y即为输出的结果。github传送门:SymphonyPy/Valified

本文实例为大家分享了Tensorflow训练MNIST手写数字识别模型的具体代码,供大家参考,具体内容如下

基本使用使用 TensorFlow, 你必须明白 TensorFlow:使用图 (g

import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data INPUT_NODE = 784 # 输入层节点=图片像素=28x28=784 OUTPUT_NODE = 10 # 输出层节点数=图片类别数目 LAYER1_NODE = 500 # 隐藏层节点数,只有一个隐藏层 BATCH_SIZE = 100 # 一个训练包中的数据个数,数字越小 # 越接近随机梯度下降,越大越接近梯度下降 LEARNING_RATE_BASE = 0.8 # 基础学习率 LEARNING_RATE_DECAY = 0.99 # 学习率衰减率 REGULARIZATION_RATE = 0.0001 # 正则化项系数 TRAINING_STEPS = 30000 # 训练轮数 MOVING_AVG_DECAY = 0.99 # 滑动平均衰减率 # 定义一个辅助函数,给定神经网络的输入和所有参数,计算神经网络的前向传播结果 def inference(input_tensor, avg_class, weights1, biases1, weights2, biases2): # 当没有提供滑动平均类时,直接使用参数当前取值 if avg_class == None: # 计算隐藏层前向传播结果 layer1 = tf.nn.relu(tf.matmul(input_tensor, weights1) + biases1) # 计算输出层前向传播结果 return tf.matmul(layer1, weights2) + biases2 else: # 首先计算变量的滑动平均值,然后计算前向传播结果 layer1 = tf.nn.relu( tf.matmul(input_tensor, avg_class.average(weights1)) + avg_class.average(biases1)) return tf.matmul( layer1, avg_class.average(weights2)) + avg_class.average(biases2) # 训练模型的过程 def train(mnist): x = tf.placeholder(tf.float32, [None, INPUT_NODE], name='x-input') y_ = tf.placeholder(tf.float32, [None, OUTPUT_NODE], name='y-input') # 生成隐藏层参数 weights1 = tf.Variable( tf.truncated_normal([INPUT_NODE, LAYER1_NODE], stddev=0.1)) biases1 = tf.Variable(tf.constant(0.1, shape=[LAYER1_NODE])) # 生成输出层参数 weights2 = tf.Variable( tf.truncated_normal([LAYER1_NODE, OUTPUT_NODE], stddev=0.1)) biases2 = tf.Variable(tf.constant(0.1, shape=[OUTPUT_NODE])) # 计算前向传播结果,不使用参数滑动平均值 avg_class=None y = inference(x, None, weights1, biases1, weights2, biases2) # 定义训练轮数变量,指定为不可训练 global_step = tf.Variable(0, trainable=False) # 给定滑动平均衰减率和训练轮数的变量,初始化滑动平均类 variable_avgs = tf.train.ExponentialMovingAverage( MOVING_AVG_DECAY, global_step) # 在所有代表神经网络参数的可训练变量上使用滑动平均 variables_avgs_op = variable_avgs.apply(tf.trainable_variables()) # 计算使用滑动平均值后的前向传播结果 avg_y = inference(x, variable_avgs, weights1, biases1, weights2, biases2) # 计算交叉熵作为损失函数 cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits( logits=y, labels=tf.argmax(y_, 1)) cross_entropy_mean = tf.reduce_mean(cross_entropy) # 计算L2正则化损失函数 regularizer = tf.contrib.layers.l2_regularizer(REGULARIZATION_RATE) regularization = regularizer(weights1) + regularizer(weights2) loss = cross_entropy_mean + regularization # 设置指数衰减的学习率 learning_rate = tf.train.exponential_decay( LEARNING_RATE_BASE, global_step, # 当前迭代轮数 mnist.train.num_examples / BATCH_SIZE, # 过完所有训练数据的迭代次数 LEARNING_RATE_DECAY) # 优化损失函数 train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize( loss, global_step=global_step) # 反向传播同时更新神经网络参数及其滑动平均值 with tf.control_dependencies([train_step, variables_avgs_op]): train_op = tf.no_op(name='train') # 检验使用了滑动平均模型的神经网络前向传播结果是否正确 correct_prediction = tf.equal(tf.argmax(avg_y, 1), tf.argmax(y_, 1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) # 初始化会话并开始训练 with tf.Session() as sess: tf.global_variables_initializer().run() # 准备验证数据,用于判断停止条件和训练效果 validate_feed = {x: mnist.validation.images, y_: mnist.validation.labels} # 准备测试数据,用于模型优劣的最后评价标准 test_feed = {x: mnist.test.images, y_: mnist.test.labels} # 迭代训练神经网络 for i in range(TRAINING_STEPS): if i%1000 == 0: validate_acc = sess.run(accuracy, feed_dict=validate_feed) print("After %d training step(s), validation accuracy using average " "model is %g " % (i, validate_acc)) xs, ys = mnist.train.next_batch(BATCH_SIZE) sess.run(train_op, feed_dict={x: xs, y_: ys}) # 训练结束后在测试集上检测模型的最终正确率 test_acc = sess.run(accuracy, feed_dict=test_feed) print("After %d training steps, test accuracy using average model " "is %g " % (TRAINING_STEPS, test_acc)) # 主程序入口 def main(argv=None): mnist = input_data.read_data_sets("/tmp/data", one_hot=True) train(mnist) # Tensorflow主程序入口 if __name__ == '__main__': tf.app.run()

对于想要学习TensorFlow(以下简称TF)的人,根据目的不同,可以简单分为以下2类:1.

输出结果如下:

看数字图片而定。如果图片较小并且质量还不错,那么通过2层的神经网络就能胜任。对于MNIst数据集

Extracting /tmp/data/train-images-idx3-ubyte.gz Extracting /tmp/data/train-labels-idx1-ubyte.gz Extracting /tmp/data/t10k-images-idx3-ubyte.gz Extracting /tmp/data/t10k-labels-idx1-ubyte.gz After 0 training step(s), validation accuracy using average model is 0.0462 After 1000 training step(s), validation accuracy using average model is 0.9784 After 2000 training step(s), validation accuracy using average model is 0.9806 After 3000 training step(s), validation accuracy using average model is 0.9798 After 4000 training step(s), validation accuracy using average model is 0.9814 After 5000 training step(s), validation accuracy using average model is 0.9826 After 6000 training step(s), validation accuracy using average model is 0.9828 After 7000 training step(s), validation accuracy using average model is 0.9832 After 8000 training step(s), validation accuracy using average model is 0.9838 After 9000 training step(s), validation accuracy using average model is 0.983 After 10000 training step(s), validation accuracy using average model is 0.9836 After 11000 training step(s), validation accuracy using average model is 0.9822 After 12000 training step(s), validation accuracy using average model is 0.983 After 13000 training step(s), validation accuracy using average model is 0.983 After 14000 training step(s), validation accuracy using average model is 0.9844 After 15000 training step(s), validation accuracy using average model is 0.9832 After 16000 training step(s), validation accuracy using average model is 0.9844 After 17000 training step(s), validation accuracy using average model is 0.9842 After 18000 training step(s), validation accuracy using average model is 0.9842 After 19000 training step(s), validation accuracy using average model is 0.9838 After 20000 training step(s), validation accuracy using average model is 0.9834 After 21000 training step(s), validation accuracy using average model is 0.9828 After 22000 training step(s), validation accuracy using average model is 0.9834 After 23000 training step(s), validation accuracy using average model is 0.9844 After 24000 training step(s), validation accuracy using average model is 0.9838 After 25000 training step(s), validation accuracy using average model is 0.9834 After 26000 training step(s), validation accuracy using average model is 0.984 After 27000 training step(s), validation accuracy using average model is 0.984 After 28000 training step(s), validation accuracy using average model is 0.9836 After 29000 training step(s), validation accuracy using average model is 0.9842 After 30000 training steps, test accuracy using average model is 0.9839

tensorflow网站上给出了新的使用Anaconda配置和安装Tensorflow的步骤,经过测

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

如何利用mnist识别自己手写的数字 tensorflow

基本使用 使用 TensorFlow, 你必须明白 TensorFlow: 使用图 (graph) 来表示计算任务. 在被称之为 会话 (Session) 的上下文 (context) 中执行图. 使用 tensor 表示数据. 通过 变量 (Variable) 维护状态. 使用 feed 和 fetch 可以为任意的操作(arb...本回答被网友采纳

训练TensorFlow模型的时候,GPU使用率总是出现突然的降低,波动很大,我想问问大神们原因是什么

我在用pytorch训练时也出现这样的问题,可能是模型相对较小,数据从CPU传递到GPU需要一定的时间。

用mnist 训练的caffe 模型 ,测试自己的手写数字识别率太低,为什么?

你要把自己的图像处理成类似MNIST的形式

比如 西方人的手写习惯

黑底白字

周围要留下4个像素的边缘

这样之类的

MNIST数据集上手写数字识别准确率是否能达到100

基本使用 使用 TensorFlow, 你必须明白 TensorFlow: 使用图 (graph) 来表示计算任务. 在被称之为 会话 (Session) 的上下文 (context) 中执行图. 使用 tensor 表示数据. 通过 变量 (Variable) 维护状态. 使用 feed 和 fetch 可以为任意的操作(arb...

求助Tensorflow下跑mnist手写体数据集遇到Cuda compute capability问题

因为你的gt630m性能没有达到最低的3.0要求。所以报错。建议你用cpu。你的在个显卡,加速效果可以忽略不计。另外用它加速计算,还容易导致笔记本散热不畅损坏GPU。追问问题所在清楚的,就是不知道有没有什么方法可以解决,让GPU跑起来?

  • 本文相关:
  • python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
  • python(tensorflow框架)实现手写数字识别系统的方法
  • python tensorflow基于cnn实现手写数字识别
  • python程序员面试题 你必须提前准备!
  • 详解pandas使用drop_duplicates去除dataframe重复项参数
  • django后台获取前端post上传的文件方法
  • python 关于反射和类的特殊成员方法
  • python读取android permission文件
  • 利用python中的mock库对python代码进行模拟测试
  • python主线程与子线程的结束顺序实例解析
  • 用python处理图片之打开\显示\保存图像的方法
  • python使用matplotlib画柱状图、散点图
  • 在pycharm导航区中打开多个project的关闭方法
  • 如何利用mnist识别自己手写的数字 tensorflow
  • 训练TensorFlow模型的时候,GPU使用率总是出现突然的降低,波动很大,我想问问大神们原因是什...
  • 用mnist 训练的caffe 模型 ,测试自己的手写数字识别率太低,为什么?
  • MNIST数据集上手写数字识别准确率是否能达到100
  • 求助Tensorflow下跑mnist手写体数据集遇到Cuda compute capability...
  • tensorflow 训练好的模型,怎么 调用
  • Tensorflow训练好的模型,怎么调用
  • 如何高效的学习 TensorFlow 代码
  • 手写数字识别的神经网络算法有哪些
  • 如何在tensorflow运行mnist数据的python代码
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved