Tensorflow練手專案 - 使用DNN進行手寫數字識別
阿新 • • 發佈:2018-11-30
首先書寫如下的程式
#coding=utf-8 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # number 1 to 10 data mnist = input_data.read_data_sets('MNIST_data', one_hot=True) def add_layer(inputs, in_size, out_size, activation_function=None ,): # add one more layer and return the output of this layer Weights = tf.Variable(tf.random_normal([in_size, out_size])) biases = tf.Variable(tf.zeros([1, out_size]) + 0.1 ,) Wx_plus_b = tf.matmul(inputs, Weights) + biases if activation_function is None: outputs = Wx_plus_b else: outputs = activation_function(Wx_plus_b ,) return outputs def compute_accuracy(v_ys, y_pre): #global prediction #判斷為1的位置是否相同 correct_prediction = tf.equal(tf.argmax(y_pre ,1), tf.argmax(v_ys ,1))# accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) return accuracy # define placeholder for inputs to network xs = tf.placeholder(tf.float32, [None, 784]) # 28x28 ys = tf.placeholder(tf.float32, [None, 10]) # add output layer prediction = add_layer(xs,784, 10, activation_function=tf.nn.softmax) # the error between prediction and real data cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction), reduction_indices=[1])) # loss tf.summary.scalar('/loss', cross_entropy) train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy) accuracy=compute_accuracy(ys, prediction) tf.summary.scalar('/accuracy', accuracy) sess = tf.Session() # 初始化及進行總結summary的整合 sess.run(tf.initialize_all_variables()) merged = tf.summary.merge_all() summary_writer = tf.summary.FileWriter('D:/PycharmProjects/mybookpractice/forshow/logs', sess.graph) for i in range(10000): batch_xs, batch_ys = mnist.train.next_batch(100) sess.run(train_step, feed_dict={xs: batch_xs, ys: batch_ys}) if i % 50 == 0: #loss=sess.run(cross_entropy, feed_dict={xs: batch_xs, ys: batch_ys}) print(sess.run(accuracy, feed_dict={xs: batch_xs, ys: batch_ys})) train_result = sess.run(merged,feed_dict={xs: batch_xs, ys: batch_ys}) summary_writer.add_summary(train_result, i) summary_writer.close()
程式執行中,可以看到如下的輸出結果:
進一步的我們開啟TensorBoard,觀察視覺化的損失曲線情況。
在瀏覽器中輸入shell中提示的埠,視覺化計算圖如下:
損失和正確率變化曲線如下: