TensorFlow實現(xiàn)Softmax Regression(回歸)識別手寫數(shù)字。MNIST(Mixed National Institute of Standards and Technology database),簡單機器視覺數(shù)據(jù)集,28X28像素手寫數(shù)字,只有灰度值信息,空白部分為0,筆跡根據(jù)顏色深淺取[0, 1], 784維,丟棄二維空間信息,目標分0~9共10類。數(shù)據(jù)加載,data.read_data_sets, 55000個樣本,測試集10000樣本,驗證集5000樣本。樣本標注信息,label,10維向量,10種類one-hot編碼。訓練集訓練模型,驗證集檢驗效果,測試集評測模型(準確率、召回率、F1-score)。
算法設(shè)計,Softmax Regression訓練手寫數(shù)字識別分類模型,估算類別概率,取概率最大數(shù)字作模型輸出結(jié)果。類特征相加,判定類概率。模型學習訓練調(diào)整權(quán)值。softmax,各類特征計算exp函數(shù),標準化(所有類別輸出概率值為1)。y = softmax(Wx+b)。
NumPy使用C、fortran,調(diào)用openblas、mkl矩陣運算庫。TensorFlow密集復雜運算在Python外執(zhí)行。定義計算圖,運算操作不需要每次把運算完的數(shù)據(jù)傳回Python,全部在Python外面運行。
import tensor flow as tf,載入TensorFlow庫。less = tf.InteractiveSession(),創(chuàng)建InteractiveSession,注冊為默認session。不同session的數(shù)據(jù)、運算,相互獨立。x = tf.placeholder(tf.float32, [None,784]),創(chuàng)建Placeholder 接收輸入數(shù)據(jù),第一參數(shù)數(shù)據(jù)類型,第二參數(shù)代表tensor shape 數(shù)據(jù)尺寸。None不限條數(shù)輸入,每條輸入為784維向量。
tensor存儲數(shù)據(jù),一旦使用掉就會消失。Variable在模型訓練迭代中持久化,長期存在,每輪迭代更新。Softmax Regression模型的Variable對象weights、biases 初始化為0。模型訓練自動學習合適值。復雜網(wǎng)絡(luò),初始化方法重要。w = tf.Variable(tf.zeros([784, 10])),784特征維數(shù),10類。Label,one-hot編碼后10維向量。
Softmax Regression算法,y = tf.nn.softmax(tf.matmul(x, W) + b)。tf.nn包含大量神經(jīng)網(wǎng)絡(luò)組件。tf.matmul,矩陣乘法函數(shù)。TensorFlow將forward、backward內(nèi)容自動實現(xiàn),只要定義好loss,訓練自動求導梯度下降,完成Softmax Regression模型參數(shù)自動學習。
定義loss function描述問題模型分類精度。Loss越小,模型分類結(jié)果與真實值越小,越精確。模型初始參數(shù)全零,產(chǎn)生初始loss。訓練目標是減小loss,找到全局最優(yōu)或局部最優(yōu)解。cross-entropy,分類問題常用loss function。y預(yù)測概率分布,y'真實概率分布(Label one-hot編碼),判斷模型對真實概率分布預(yù)測準確度。cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))。定義placeholder,輸入真實label。tf.reduce_sum求和,tf.reduce_mean每個batch數(shù)據(jù)結(jié)果求均值。