學(xué)習(xí)筆記TF024:TensorFlow實(shí)現(xiàn)Softmax Regression(回歸)識(shí)別手寫數(shù)字

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

算法設(shè)計(jì),Softmax Regression訓(xùn)練手寫數(shù)字識(shí)別分類模型,估算類別概率,取概率最大數(shù)字作模型輸出結(jié)果。類特征相加,判定類概率。模型學(xué)習(xí)訓(xùn)練調(diào)整權(quán)值。softmax,各類特征計(jì)算exp函數(shù),標(biāo)準(zhǔn)化(所有類別輸出概率值為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ù)類型,第二參數(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類。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描述問題模型分類精度。Loss越小,模型分類結(jié)果與真實(shí)值越小,越精確。模型初始參數(shù)全零,產(chǎn)生初始loss。訓(xùn)練目標(biāo)是減小loss,找到全局最優(yōu)或局部最優(yōu)解。cross-entropy,分類問題常用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é)果求均值。

定義優(yōu)化算法,隨機(jī)梯度下降SGD(Stochastic Gradient Descent)。根據(jù)計(jì)算圖自動(dòng)求導(dǎo),根據(jù)反向傳播(Back Propagation)算法訓(xùn)練,每輪迭代更新參數(shù)減小loss。提供封裝優(yōu)化器,每輪迭代feed數(shù)據(jù),TensorFlow在后臺(tái)自動(dòng)補(bǔ)充運(yùn)算操作(Operation)實(shí)現(xiàn)反向傳播和梯度下降。train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)。調(diào)用tf.train.GradientDescentOptimizer,設(shè)置學(xué)習(xí)速度0.5,設(shè)定優(yōu)化目標(biāo)cross-entropy,得到訓(xùn)練操作train_step。

tf.global_variables_initializer().run()。TensorFlow全局參數(shù)初始化器tf.golbal_variables_initializer。

batch_xs,batch_ys = mnist.train.next_batch(100)。訓(xùn)練操作train_step。每次隨機(jī)從訓(xùn)練集抽取100條樣本構(gòu)成mini-batch,feed給 placeholder,調(diào)用train_step訓(xùn)練樣本。使用小部分樣本訓(xùn)練,隨機(jī)梯度下降,收斂速度更快。每次訓(xùn)練全部樣本,計(jì)算量大,不容易跳出局部最優(yōu)。

correct_prediction = tf.equal(tf.argmax(y,1), tf.argmzx(y_,1)),驗(yàn)證模型準(zhǔn)確率。tf.argmax從tensor尋找最大值序號(hào),tf.argmax(y,1)求預(yù)測(cè)數(shù)字概率最大,tf.argmax(y_,1)找樣本真實(shí)數(shù)字類別。tf.equal判斷預(yù)測(cè)數(shù)字類別是否正確,返回計(jì)算分類操作是否正確。

accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32)),統(tǒng)計(jì)全部樣本預(yù)測(cè)正確度。tf.cast轉(zhuǎn)化correct_prediction輸出值類型。

print(accuracy.eval({x: mnist.test.images,y_: mnist.test.labels}))。測(cè)試數(shù)據(jù)特征、Label輸入評(píng)測(cè)流程,計(jì)算模型測(cè)試集準(zhǔn)確率。Softmax Regression MNIST數(shù)據(jù)分類識(shí)別,測(cè)試集平均準(zhǔn)確率92%左右。

TensorFlow 實(shí)現(xiàn)簡(jiǎn)單機(jī)器算法步驟:
1?定義算法公式,神經(jīng)網(wǎng)絡(luò)forward計(jì)算。
2?定義loss,選定優(yōu)化器,指定優(yōu)化器優(yōu)化loss。
3?迭代訓(xùn)練數(shù)據(jù)。
4?測(cè)試集、驗(yàn)證集評(píng)測(cè)準(zhǔn)確率。

定義公式只是Computation Graph,只有調(diào)用run方法,feed數(shù)據(jù),計(jì)算才執(zhí)行。

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
print(mnist.train.images.shape, mnist.train.labels.shape)
print(mnist.test.images.shape, mnist.test.labels.shape)
print(mnist.validation.images.shape, mnist.validation.labels.shape)
import tensorflow as tf
sess = tf.InteractiveSession()
x = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x, W) + b)
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)
tf.global_variables_initializer().run()
for i in range(1000):
    batch_xs, batch_ys = mnist.train.next_batch(100)
    train_step.run({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(accuracy.eval({x: mnist.test.images, y_: mnist.test.labels}))

參考資料:
《TensorFlow實(shí)戰(zhàn)》

歡迎付費(fèi)咨詢(150元每小時(shí)),我的微信:qingxingfengzi

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,663評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,125評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,506評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,614評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,402評(píng)論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,934評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,021評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,168評(píng)論 0 287
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,690評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,596評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,784評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,288評(píng)論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,027評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,404評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,662評(píng)論 1 280
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,398評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,743評(píng)論 2 370

推薦閱讀更多精彩內(nèi)容