#coding:utf8 from tensorflow.examples.tutorials.mnist import input_data import tensorflow as tf import numpy as np mnist = input_data.read_data_sets('MNIST_data',one_hot=True) sess = tf.InteractiveSession() x = tf.placeholder('float',shape = [None,784]) y_true = tf.placeholder('float',shape=[None,10]) #W = tf.Variable(tf.zeros([784,10])) #b = tf.Variable(tf.zeros([10])) #初始化权重 def weight_variable(shape): initial = tf.truncated_normal(shape,stddev=0.1) return tf.Variable(initial) #初始化偏值 def biase_variable(shape): initial = tf.constant(0.1,shape=shape) return tf.Variable(initial) #二维卷积 def conv2d(x,W): return tf.nn.conv2d(x,W,strides=[1,1,1,1],padding='SAME') #最大池化 def max_pool_2x2(x): return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME') #第一层卷积 W_conv1 = weight_variable([5,5,1,32]) b_conv1 = biase_variable([32]) x_image = tf.reshape(x,[-1,28,28,1]) h_conv1 = tf.nn.softmax(conv2d(x_image,W_conv1) + b_conv1) h_pool1 = max_pool_2x2(h_conv1) #第二层卷积 W_conv2 = weight_variable([5,5,32,64]) b_conv2 = weight_variable([64]) h_conv2 = tf.nn.relu(conv2d(h_pool1,W_conv2) + b_conv2) h_pool2 = max_pool_2x2(h_conv2) #密集全连接层 W_fc1 = weight_variable([7*7*64,1024]) b_fc1 = biase_variable([1024]) h_pool2_flat = tf.reshape(h_pool2,[-1,7*7*64]) h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat,W_fc1) + b_fc1) #Dropout减少过拟合 keep_prob = tf.placeholder('float') h_fc1_drop = tf.nn.dropout(h_fc1,keep_prob) #输出层 W_fc2 = weight_variable([1024,10]) b_fc2 = biase_variable([10]) y_conv = tf.nn.softmax(tf.matmul(h_fc1_drop,W_fc2) + b_fc2) #交叉熵计算误差 cross_entropy = -tf.reduce_mean(y_true*tf.log(y_conv)) #最小化交叉熵(优化误差) train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy) #计算真实值与预测值之间的误差 correct_prediction = tf.equal(tf.argmax(y_conv,1),tf.argmax(y_true,1)) #正确率 accuracy = tf.reduce_mean(tf.cast(correct_prediction,'float')) #执行图 sess.run(tf.global_variables_initializer()) for i in range(20000): batch = mnist.train.next_batch(50) if i % 100 == 0: train_accuracy = accuracy.eval(feed_dict = { x:batch[0],y_true:batch[1],keep_prob:1.0 }) print("step %d training accuracy %g"%(i,train_accuracy)) train_step.run(feed_dict = { x:batch[0],y_true:batch[1],keep_prob:0.5 }) print ("test accuracy %g"%accuracy.eval(feed_dict={ x:mnist.test.images,y_true:mnist.test.labels,keep_prob:1.0 }))
TensorFlow手写识别
最新推荐文章于 2023-11-26 20:35:05 发布