整體流程:
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方法執行這些節點來獲取結果`