Tensorflow MNIST 手寫識別

這是一個系列,記錄我Tensorflow開發常用的代碼,小常識,有些是參考網上代碼,(講的可能有點爛,求不要打臉,嚶嚶嚶~~)送給那些需要的人。可以相互交流,喜歡的加我吧。
Wx: Lxp911221

根據官方文檔敲“MNIST機器學習入門”第一個例子,碰到一個煩了我很久的問題
input_data 一直找不到。why?

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

找了很久,找到了上邊一段代碼,執行成功。所以它很重要 ):
下邊代碼是一位博主的,比我的代碼註釋詳細,就直接用他的吧
@MebiuW

# -*- coding:utf-8 -*-  
# Noted by: @MebiuW sina weibo
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
#加載數據,如果不存在他會首先自動下載數據到指定的目錄
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
# X是一個Placeholder ,這個值後續再放入讓TF計算,這裏是一個784維,但是訓練數量不確定的(用None表示)的浮點值
x = tf.placeholder(tf.float32, [None, 784])
# 設置對應的權值和偏置的表示,Variable代表一個變量,會隨着程序的生命週期做一個改變
# 需要給一個初始的值,這裏都全部表示爲0
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
# 這裏根據我們上面描述的,構件我們的模型,y是模型的輸出,matmul是矩陣乘法,公式請參見之前的
y = tf.nn.softmax(tf.matmul(x, W) + b)
# 這裏是保存真是的Label,同樣是Placeholder,原理同X
y_ = tf.placeholder(tf.float32, [None, 10])
# 在機器學習的模型中,我們需要定義一個衡量模型好壞的方式,稱爲代價函數(Cost Loss),這裏使用了交叉熵去衡量 reduce_sum 累加
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
#訓練的步驟,告訴tf,用梯度下降法去優化,學習率是0.5,目的是最小化交叉熵
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
# 到目前爲止,我們已經定義完了所有的步驟,下面就需要初始化這個訓練步驟了,首先初始化所有變量(之前定義的變量)
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
#運行步驟1000次
for i in range(1000):
  #載入數據
  batch_xs, batch_ys = mnist.train.next_batch(100)
  #執行步驟,但是需要填入placeholder的值
  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, tf.float32))
#理論上應該是92%附近
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))

執行結果不到92%,不過第一步,慢慢來。謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章