初識Tensorflow 數字識別MNIST

整體流程:
1.定義算法公式
2.定義loss 選定優化器,並制定優化器優化loss
3.迭代數據進行訓練
4.在測試集或驗證集上對準確率進行測評

首先導入tensorflow 與mnist的input-data 用來獲取traning test 包

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

將訓練及測試圖集保存在項目中的 MNIST_data目錄下,沒有時會自動聯網下載保存

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

註冊默認的tensorflow會話

sess = tf.InteractiveSession()

定義輸入x 爲placeholder佔位符

x = tf.placeholder(tf.float32, [None, 784])

定義 權重 W 偏置值b

W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))

定義y的計算函數 用sotfmax Regression算法
y = softmax(Wx + b)

y = tf.nn.softmax(tf.matmul(x, W) + b)

定義損失函數cross_entropy
cross_entropy 通常用來處理分類問題

y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))

定義優化算法

train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

初始化所有變量

sess.run(tf.global_variables_initializer())

迭代 train_step 算法 將batch_xs batch_ys feed給佔位符 x y_

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, tf.float32))
print(sess.run(accuracy,feed_dict={x:mnist.test.images,y_:mnist.test.labels}))

完整代碼如下:

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

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

# 註冊默認的tensorflow會話
sess = tf.InteractiveSession()

# 輸入x  placeholder爲佔位符
x = tf.placeholder(tf.float32, [None, 784])

# 權重 W   偏置值b
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))

# 定義y的計算函數 用sotfmax Regression算法
# y = softmax(Wx + b)
y = tf.nn.softmax(tf.matmul(x, W) + b)

#定義損失函數cross_entropy
#cross_entropy 通常用來處理分類問題

y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))

# 定義優化算法
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

# 初始化所有變量
sess.run(tf.global_variables_initializer())

# 迭代 train_step 算法 將batch_xs batch_ys feed給佔位符 x y_
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, tf.float32))

print(sess.run(accuracy,feed_dict={x:mnist.test.images,y_:mnist.test.labels}))

總結:

Tensorflow中定義的每個公式的計算其實並沒有立刻發生,只有等調用run方法並feed數據時計算纔會真正的執行。
例如代碼中的corss_entropy、train_step、accuracy等都是計算圖中的節點,通過run方法執行這些節點來獲取結果`

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