MNIST数字识别问题之tensorflow实现
2018-01-11 12:26
766 查看
import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data INPUT_NODE = 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_STEPA=30000 MOVING_AVERAGE_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])) y=inference(x,None,weights1,biases1,weights2,biases2) global_step=tf.Variable(0,trainable=False) variable_average=tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY,global_step) variable_average_op=variable_average.apply(tf.trainable_variables()) average_y=inference(x,variable_average,weights1,biases1,weights2,biases2) cross_entropy=tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y, labels=tf.arg_max(y_,1)) cross_entropy_mean=tf.reduce_mean(cross_entropy) 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) train_op=tf.group(train_step,variable_average_op) correct_prediction=tf.equal(tf.arg_max(average_y,1),tf.arg_max(y_,1)) accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) with tf.Session() as sess: tf.initialize_all_variables().run() variable_feed={x:mnist.validation.images,y_:mnist.validation.labels} test_feed={x:mnist.test.images,y_:mnist.test.labels} for i in range(TRAINING_STEPA): if i%1000==0: validate_acc=sess.run(accuracy,feed_dict=variable_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 step(s),test accuracy""using average model is%g" % (i, test_acc)) def main(argv=None): mnist=input_data.read_data_sets("/tmp/data",one_hot=True) train(mnist) if __name__=='__main__': tf.app.run()
After 0 training step(s),validation accuracyusing average model is0.0798 After 1000 training step(s),validation accuracyusing average model is0.9764 After 2000 training step(s),validation accuracyusing average model is0.9796 After 3000 training step(s),validation accuracyusing average model is0.9802 After 4000 training step(s),validation accuracyusing average model is0.9832 After 5000 training step(s),validation accuracyusing average model is0.9822 After 6000 training step(s),validation accuracyusing average model is0.9842 After 7000 training step(s),validation accuracyusing average model is0.984 After 8000 training step(s),validation accuracyusing average model is0.984 After 9000 training step(s),validation accuracyusing average model is0.9846 After 10000 training step(s),validation accuracyusing average model is0.9832 After 11000 training step(s),validation accuracyusing average model is0.9844 After 12000 training step(s),validation accuracyusing average model is0.984 After 13000 training step(s),validation accuracyusing average model is0.9846 After 14000 training step(s),validation accuracyusing average model is0.9848 After 15000 training step(s),validation accuracyusing average model is0.9838 After 16000 training step(s),validation accuracyusing average model is0.984 After 17000 training step(s),validation accuracyusing average model is0.9848 After 18000 training step(s),validation accuracyusing average model is0.9838 After 19000 training step(s),validation accuracyusing average model is0.9848 After 20000 training step(s),validation accuracyusing average model is0.9842 After 21000 training step(s),validation accuracyusing average model is0.9842 After 22000 training step(s),validation accuracyusing average model is0.9842 After 23000 training step(s),validation accuracyusing average model is0.9844 After 24000 training step(s),validation accuracyusing average model is0.9846 After 25000 training step(s),validation accuracyusing average model is0.985 After 26000 training step(s),validation accuracyusing average model is0.9848 After 27000 training step(s),validation accuracyusing average model is0.9844 After 28000 training step(s),validation accuracyusing average model is0.9846 After 29000 training step(s),validation accuracyusing average model is0.9844 After 29999 training step(s),test accuracyusing average model is0.9856
Process finished with exit code 0
相关文章推荐
- 使用tensorflow卷积神经网络实现mnist手写数字识别
- TensorFlow代码实现(一)[MNIST手写数字识别]
- MNIST数字识别问题(Tensorflow)
- Deep Learning-TensorFlow (1) CNN卷积神经网络_MNIST手写数字识别代码实现
- Tensorflow框架下实现Mnist数字识别
- 【TensorFlow-windows】(一)实现Softmax Regression进行手写数字识别(mnist)
- tensorflow——用RNN实现MNIST手写数字识别
- TensorFlow实现机器学习的“Hello World”--Mnist手写数字识别
- 深度学习-传统神经网络使用TensorFlow框架实现MNIST手写数字识别
- Tensorflow 实现 MNIST 手写数字识别
- TensorFlow实现mnist数字识别——CNN LeNet-5模型
- TensorFlow之CNN实现MNIST手写数字识别
- Deep Learning-TensorFlow (1) CNN卷积神经网络_MNIST手写数字识别代码实现详解
- TensorFlow学习---实现mnist手写数字识别
- 用Tensorflow搭建CNN卷积神经网络,实现MNIST手写数字识别
- 使用Tensorflow实现CNN进行MNIST数字识别
- Tensorflow实现MNIST手写数字识别(Softmax Regression)
- TensorFlow DNN 实现MNIST数字识别(初版)
- TensorFlow学习笔记(3) MNIST数字识别问题
- 利用tensorflow一步一步实现基于MNIST 数据集进行手写数字识别的神经网络,逻辑回归