TensorFlow實(shí)現(xiàn)Softmax Regression(回歸)識(shí)別手寫(xiě)數(shù)字。MNIST(Mixed National Institute of Standards and Technology database),簡(jiǎn)單機(jī)器視覺(jué)數(shù)據(jù)集,28X28像素手寫(xiě)數(shù)字,只有灰度值信息,空白部分為0,筆跡根據(jù)顏色深淺取[0, 1], 784維,丟棄二維空間信息,目標(biāo)分0~9共10類(lèi)。數(shù)據(jù)加載,data.read_data_sets, 55000個(gè)樣本,測(cè)試集10000樣本,驗(yàn)證集5000樣本。樣本標(biāo)注信息,label,10維向量,10種類(lèi)one-hot編碼。訓(xùn)練集訓(xùn)練模型,驗(yàn)證集檢驗(yàn)效果,測(cè)試集評(píng)測(cè)模型(準(zhǔn)確率、召回率、F1-score)。

算法設(shè)計(jì),Softmax Regression訓(xùn)練手寫(xiě)數(shù)字識(shí)別分類(lèi)模型,估算類(lèi)別概率,取概率最大數(shù)字作模型輸出結(jié)果。類(lèi)特征相加,判定類(lèi)概率。模型學(xué)習(xí)訓(xùn)練調(diào)整權(quán)值。softmax,各類(lèi)特征計(jì)算exp函數(shù),標(biāo)準(zhǔn)化(所有類(lèi)別輸出概率值為1)。y = softmax(Wx+b)。

NumPy使用C、fortran,調(diào)用openblas、mkl矩陣運(yùn)算庫(kù)。TensorFlow密集復(fù)雜運(yùn)算在Python外執(zhí)行。定義計(jì)算圖,運(yùn)算操作不需要每次把運(yùn)算完的數(shù)據(jù)傳回Python,全部在Python外面運(yùn)行。

import tensor flow as tf,載入TensorFlow庫(kù)。less = tf.InteractiveSession(),創(chuàng)建InteractiveSession,注冊(cè)為默認(rèn)session。不同session的數(shù)據(jù)、運(yùn)算,相互獨(dú)立。x = tf.placeholder(tf.float32, [None,784]),創(chuàng)建Placeholder 接收輸入數(shù)據(jù),第一參數(shù)數(shù)據(jù)類(lèi)型,第二參數(shù)代表tensor shape 數(shù)據(jù)尺寸。None不限條數(shù)輸入,每條輸入為784維向量。

tensor存儲(chǔ)數(shù)據(jù),一旦使用掉就會(huì)消失。Variable在模型訓(xùn)練迭代中持久化,長(zhǎng)期存在,每輪迭代更新。Softmax Regression模型的Variable對(duì)象weights、biases 初始化為0。模型訓(xùn)練自動(dòng)學(xué)習(xí)合適值。復(fù)雜網(wǎng)絡(luò),初始化方法重要。w = tf.Variable(tf.zeros([784, 10])),784特征維數(shù),10類(lèi)。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)容自動(dòng)實(shí)現(xiàn),只要定義好loss,訓(xùn)練自動(dòng)求導(dǎo)梯度下降,完成Softmax Regression模型參數(shù)自動(dòng)學(xué)習(xí)。

定義loss function描述問(wèn)題模型分類(lèi)精度。Loss越小,模型分類(lèi)結(jié)果與真實(shí)值越小,越精確。模型初始參數(shù)全零,產(chǎn)生初始loss。訓(xùn)練目標(biāo)是減小loss,找到全局最優(yōu)或局部最優(yōu)解。cross-entropy,分類(lèi)問(wèn)題常用loss function。y預(yù)測(cè)概率分布,y'真實(shí)概率分布(Label one-hot編碼),判斷模型對(duì)真實(shí)概率分布預(yù)測(cè)準(zhǔn)確度。cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))。定義placeholder,輸入真實(shí)label。tf.reduce_sum求和,tf.reduce_mean每個(gè)batch數(shù)據(jù)結(jié)果求均值。

網(wǎng)友評(píng)論