首先是不含隱層的神經網絡, 輸入層是784個神經元 輸出層是10個神經元網絡
代碼以下dom
#coding:utf-8 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #載入數據集 mnist = input_data.read_data_sets("MNIST_data", one_hot=True) #每一個批次的大小 batch_size = 100 #計算一共有多少個批次 n_batch = mnist.train.num_examples // batch_size #定義兩個placeholder x = tf.placeholder(tf.float32, [None,784]) #輸入圖像 y = tf.placeholder(tf.float32, [None,10]) #輸入標籤 #建立一個簡單的神經網絡 784個像素點對應784個數 所以輸入層是784個神經元 輸出層是10個神經元 不含隱層 #最後準確率在92%左右 W = tf.Variable(tf.zeros([784,10])) #生成784行 10列的全0矩陣 b = tf.Variable(tf.zeros([1,10])) prediction = tf.nn.softmax(tf.matmul(x,W)+b) #二次代價函數 loss = tf.reduce_mean(tf.square(y-prediction)) #使用梯度降低法 train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss) #初始化變量 init = tf.global_variables_initializer() #結果存放在布爾型列表中 #argmax能給出某個tensor對象在某一維上的其數據最大值所在的索引值 correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(prediction,1)) #求準確率 accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) with tf.Session() as sess: sess.run(init) for epoch in range(21): #21個epoch 把全部的圖片訓練21次 for batch in range(n_batch): # batch_xs,batch_ys = mnist.train.next_batch(batch_size) sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys}) acc = sess.run(accuracy,feed_dict={x:mnist.test.images, y:mnist.test.labels}) print ("Iter " + str(epoch) + ",Testing Accuracy " + str(acc))
結果以下函數
Iter 0,Testing Accuracy 0.8304 Iter 1,Testing Accuracy 0.8704 Iter 2,Testing Accuracy 0.8821 Iter 3,Testing Accuracy 0.8876 Iter 4,Testing Accuracy 0.8932 Iter 5,Testing Accuracy 0.8968 Iter 6,Testing Accuracy 0.8995 Iter 7,Testing Accuracy 0.9019 Iter 8,Testing Accuracy 0.9033 Iter 9,Testing Accuracy 0.9048 Iter 10,Testing Accuracy 0.9065 Iter 11,Testing Accuracy 0.9074 Iter 12,Testing Accuracy 0.9084 Iter 13,Testing Accuracy 0.909 Iter 14,Testing Accuracy 0.9094 Iter 15,Testing Accuracy 0.9112 Iter 16,Testing Accuracy 0.9117 Iter 17,Testing Accuracy 0.9128 Iter 18,Testing Accuracy 0.9127 Iter 19,Testing Accuracy 0.9132 Iter 20,Testing Accuracy 0.9144
接下來是含一個隱層的神經網絡,輸入層是784個神經元,兩個隱層都是100個神經元,輸出層是10個神經元,迭代500次,最後準確率在88%左右,汗。。。。準確率反而下降了,慢慢調參吧spa
#coding:utf-8 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #載入數據集 mnist = input_data.read_data_sets("MNIST_data", one_hot=True) #每一個批次的大小 batch_size = 50 #計算一共有多少個批次 n_batch = mnist.train.num_examples // batch_size #定義兩個placeholder x = tf.placeholder(tf.float32, [None,784]) #輸入圖像 y = tf.placeholder(tf.float32, [None,10]) #輸入標籤 #定義神經網絡中間層 Weights_L1 = tf.Variable(tf.random_normal([784,100])) biase_L1 = tf.Variable(tf.zeros([1,100])) Wx_plus_b_L1 = tf.matmul(x, Weights_L1)+biase_L1 L1 = tf.nn.tanh(Wx_plus_b_L1) #使用正切函數做爲激活函數 Weights_L2 = tf.Variable(tf.random_normal([100,100])) biase_L2 = tf.Variable(tf.zeros([1,100])) Wx_plus_b_L2 = tf.matmul(L1, Weights_L2)+biase_L2 L2 = tf.nn.tanh(Wx_plus_b_L2) #使用正切函數做爲激活函數 #定義神經網絡輸出層 Weights_L3 = tf.Variable(tf.random_normal([100,10])) biase_L3 = tf.Variable(tf.zeros([1,10])) Wx_plus_b_L3 = tf.matmul(L2,Weights_L3) + biase_L3 prediction = tf.nn.tanh(Wx_plus_b_L3) #二次代價函數 loss = tf.reduce_mean(tf.square(y-prediction)) #使用梯度降低法 train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss) #初始化變量 init = tf.global_variables_initializer() #結果存放在布爾型列表中 #argmax能給出某個tensor對象在某一維上的其數據最大值所在的索引值 correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(prediction,1)) #求準確率 accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) with tf.Session() as sess: sess.run(init) for epoch in range(500): for batch in range(n_batch): batch_xs,batch_ys = mnist.train.next_batch(batch_size) sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys}) acc = sess.run(accuracy,feed_dict={x:mnist.test.images, y:mnist.test.labels}) print ("Iter " + str(epoch) + ",Testing Accuracy " + str(acc))
Iter 487,Testing Accuracy 0.8847 Iter 488,Testing Accuracy 0.8853 Iter 489,Testing Accuracy 0.878 Iter 490,Testing Accuracy 0.8861 Iter 491,Testing Accuracy 0.8863 Iter 492,Testing Accuracy 0.8784 Iter 493,Testing Accuracy 0.8855 Iter 494,Testing Accuracy 0.8787 Iter 495,Testing Accuracy 0.881 Iter 496,Testing Accuracy 0.8837 Iter 497,Testing Accuracy 0.8817 Iter 498,Testing Accuracy 0.8837 Iter 499,Testing Accuracy 0.8866