您的位置:首页 > 其它

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


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: