1. 程式人生 > >Tensorflow MNIST機器學習入門程式碼(直接編譯執行)

Tensorflow MNIST機器學習入門程式碼(直接編譯執行)

廢話不多說,直接上程式碼,複製到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}))

執行結果: