Tensorflow MNIST機器學習入門程式碼(直接編譯執行)
阿新 • • 發佈:2018-12-18
廢話不多說,直接上程式碼,複製到Spyder,編譯執行。
#設定程式碼如下,可以避免下載input_data.py from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets('MNIST_data/', one_hot=True) import tensorflow as tf #放置佔位符 x=tf.placeholder("float",[None,784]) #建立兩個變數 w=tf.Variable(tf.zeros([784,10])) b=tf.Variable(tf.zeros([10])) #使用TensorFlow自帶的softmax迴歸線性模型 y=tf.nn.softmax(tf.matmul(x,w)+b) #為了進行訓練,需要把正確值一併傳入網路 y_=tf.placeholder("float",[None,10]) #計算交叉墒 cross_entropy=-tf.reduce_sum(y_*tf.log(y)) #使用梯度下降演算法以0.01的學習率最小化交叉墒 train_step=tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy) #初始化之前建立的變數的操作 init=tf.initialize_all_variables() #啟動初始化 sess=tf.Session() sess.run(init) #開始訓練模型,迴圈1000次,每次都會隨機抓取訓練資料中的100條資料,然後作為引數替換之前的佔位符來進行train_step for i in range(1000): batch_xs,batch_ys=mnist.train.next_batch(100) sess.run(train_step,feed_dict={x:batch_xs,y_:batch_ys}) #評估模型,tf.argmax能給出某個tensor物件在某一緯度上資料的最大索引,因為標籤是由0,1組成,返回的索引就是數值為1的位置 correct_prediction=tf.equal(tf.argmax(y,1),tf.argmax(y_,1)) #計算正確預測項的比例,因為tf.equal返回的是布林值,相等表示真,真的用ture,假的用false,使用tf.cast可以把布林值轉換成浮點數,tf.reduce_mean是求平均值 accuracy=tf.reduce_mean(tf.cast(correct_prediction,"float")) #在session中啟動accuracy,輸入是MNIST中的測試集 print (sess.run(accuracy,feed_dict={x:mnist.test.images,y_:mnist.test.labels}))
執行結果: