1. 程式人生 > >tensorflow入門案例詳解——MNIST神經網路識別

tensorflow入門案例詳解——MNIST神經網路識別

1. MNIST下載


去官網http://yann.lecun.com/exdb/mnist/ 下載4個檔案:訓練影象集/訓練標籤集/測試影象集/測試標籤集
在tensorflow example mnist的目錄下面新建MNIST_data資料夾,然後把下載的4個MNIST資料集複製進去。例如我電腦上的路徑如下:


C:\Users\Administrator\Anaconda3\envs\tensorflow\Lib\site-packages\tensorflow\examples\tutorials\mnist\MNIST_data


2. tensorflow MNIST程式碼分析


import tensorflow.examples.tutorials.mnist.input_data as input_data
import tensorflow as tf


#資料讀取與載入


mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)


#建立計算圖,每個operate是圖中的一個節點。類似變數的宣告,佔位符與變數的區別是變數更靈活,可在計算中修改
x = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))


#softmax方法是一個通用化的sigmoid方法,就是一個通用的邏輯迴歸函式,softmax主要應用在多分類,sigmoid主要應用在二值分類
y = tf.nn.softmax(tf.matmul(x,W) + b)y_ = tf.placeholder("float", [None,10])


#定義交叉熵,交叉熵衡量兩個分佈的差異性,這個值的最小值等於真實值y_的熵
還有相對熵的概念,相對熵=交叉熵- y的熵,所以相對熵的最小值是0,這時候表明,預測的y的分佈與真實值y_的分佈完全一樣

cross_entropy = -tf.reduce_sum(y_*tf.log(y))


#梯度下降法來最小化交叉熵,這裡步長0.01
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)


#變數初始化並啟動會話
init = tf.global_variables_initializer()
sess = tf.Session()sess.run(init)


#迭代訓練模型的次數,這裡每次next_batch隨機抽樣100份資料,用feed_dict把資料傳給最開始定義的x
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})


#預測值評估,檢查準確率

correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))


感興趣的朋友想與我交流的話可以加群R語言&大資料分析456726635,或者加群Python & Spark 636866908。