Tensorflow語法基礎(chǔ)(3)-mnist

mnist實例--用簡單的神經(jīng)網(wǎng)絡(luò)來訓(xùn)練和測試

mnist實例--卷積神經(jīng)網(wǎng)絡(luò)CNN

關(guān)于softmax

簡單神經(jīng)網(wǎng)絡(luò)沒有卷積功能,只有簡單的三層:輸入層瞬哼,隱藏層和輸出層婚肆。
數(shù)據(jù)從輸入層輸入,在隱藏層進行加權(quán)變換坐慰,最后在輸出層進行輸出旬痹。輸出的時候,我們可以使用softmax回歸讨越,輸出屬于每個類別的概率值两残。表示如下:


其中,x1,x2,x3為輸入數(shù)據(jù)把跨,經(jīng)過運算后人弓,得到三個數(shù)據(jù)屬于某個類別的概率值y1,y2,y3. 用簡單的公式表示如下:



在訓(xùn)練過程中,我們將真實的結(jié)果和預(yù)測的結(jié)果相比(交叉熵比較法)着逐,會得到一個殘差崔赌。公式如下:



y 是我們預(yù)測的概率值, y' 是實際的值。這個殘差越小越好耸别,我們可以使用梯度下降法健芭,不停地改變W和b的值,使得殘差逐漸變小秀姐,最后收斂到最小值慈迈。這樣訓(xùn)練就完成了,我們就得到了一個模型(W和b的最優(yōu)化值)省有。

簡單神經(jīng)網(wǎng)絡(luò)的訓(xùn)練例子(非卷積):

# -*- coding: utf-8 -*-
"""
@author: gongjia copy
"""
import tensorflow as tf
import tensorflow.examples.tutorials.mnist.input_data as input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
x = tf.placeholder(tf.float32, [None, 784])
y_actual = tf.placeholder(tf.float32, shape=[None, 10])
W = tf.Variable(tf.zeros([784,10]))        #初始化權(quán)值W
b = tf.Variable(tf.zeros([10]))            #初始化偏置項b
y_predict = tf.nn.softmax(tf.matmul(x,W) + b)     #加權(quán)變換并進行softmax回歸痒留,得到預(yù)測概率
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_actual*tf.log(y_predict),reduction_indies=1))   #求交叉熵
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)   #用梯度下降法使得殘差最小

correct_prediction = tf.equal(tf.argmax(y_predict,1), tf.argmax(y_actual,1))   #在測試階段,測試準確度計算
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))                #多個批次的準確度均值

init = tf.initialize_all_variables()
with tf.Session() as sess:
    sess.run(init)
    for i in range(1000):               #訓(xùn)練階段蠢沿,迭代1000次
        batch_xs, batch_ys = mnist.train.next_batch(100)           #按批次訓(xùn)練伸头,每批100行數(shù)據(jù)
        sess.run(train_step, feed_dict={x: batch_xs, y_actual: batch_ys})   #執(zhí)行訓(xùn)練
        if(i%100==0):                  #每訓(xùn)練100次,測試一次
            print "accuracy:",sess.run(accuracy, feed_dict={x: mnist.test.images, y_actual: mnist.test.labels})

每訓(xùn)練100次舷蟀,測試一次恤磷,隨著訓(xùn)練次數(shù)的增加,測試精度也在增加野宜。訓(xùn)練結(jié)束后扫步,1W行數(shù)據(jù)測試的平均精度為91%左右,不是太高速缨,肯定沒有CNN高锌妻。

# -*- coding: utf-8 -*-
"""
@author: gongjia copy
"""
import tensorflow as tf 
import tensorflow.examples.tutorials.mnist.input_data as input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)     #下載并加載mnist數(shù)據(jù)
x = tf.placeholder(tf.float32, [None, 784])                        #輸入的數(shù)據(jù)占位符
y_actual = tf.placeholder(tf.float32, shape=[None, 10])            #輸入的標簽占位符

#定義一個函數(shù),用于初始化所有的權(quán)值 W
def weight_variable(shape):
  initial = tf.truncated_normal(shape, stddev=0.1)
  return tf.Variable(initial)

#定義一個函數(shù)旬牲,用于初始化所有的偏置項 b
def bias_variable(shape):
  initial = tf.constant(0.1, shape=shape)
  return tf.Variable(initial)
  
#定義一個函數(shù)仿粹,用于構(gòu)建卷積層
def conv2d(x, W):
  return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')

#定義一個函數(shù)搁吓,用于構(gòu)建池化層
def max_pool(x):
  return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],strides=[1, 2, 2, 1], padding='SAME')

#構(gòu)建網(wǎng)絡(luò)
x_image = tf.reshape(x, [-1,28,28,1])         #轉(zhuǎn)換輸入數(shù)據(jù)shape,以便于用于網(wǎng)絡(luò)中
W_conv1 = weight_variable([5, 5, 1, 32])      
b_conv1 = bias_variable([32])       
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)     #第一個卷積層
h_pool1 = max_pool(h_conv1)                                  #第一個池化層

W_conv2 = weight_variable([5, 5, 32, 64])
b_conv2 = bias_variable([64])
h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)      #第二個卷積層
h_pool2 = max_pool(h_conv2)                                   #第二個池化層

W_fc1 = weight_variable([7 * 7 * 64, 1024])
b_fc1 = bias_variable([1024])
h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64])              #reshape成向量
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)    #第一個全連接層

keep_prob = tf.placeholder("float") 
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)                  #dropout層

W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])
y_predict=tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)   #softmax層

cross_entropy = -tf.reduce_sum(y_actual*tf.log(y_predict))     #交叉熵
train_step = tf.train.GradientDescentOptimizer(1e-3).minimize(cross_entropy)    #梯度下降法
correct_prediction = tf.equal(tf.argmax(y_predict,1), tf.argmax(y_actual,1))    
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))                 #精確度計算
sess=tf.InteractiveSession()                          
sess.run(tf.initialize_all_variables())
for i in range(20000):
  batch = mnist.train.next_batch(50)
  if i%100 == 0:                  #訓(xùn)練100次,驗證一次
    train_acc = accuracy.eval(feed_dict={x:batch[0], y_actual: batch[1], keep_prob: 1.0})
    print('step',i,'training accuracy',train_acc)
    train_step.run(feed_dict={x: batch[0], y_actual: batch[1], keep_prob: 0.5})

test_acc=accuracy.eval(feed_dict={x: mnist.test.images, y_actual: mnist.test.labels, keep_prob: 1.0})
print("test accuracy",test_acc)



('step', 18800, 'training accuracy', 0.079999998)
('step', 18900, 'training accuracy', 0.059999999)
('step', 19000, 'training accuracy', 0.1)
('step', 19100, 'training accuracy', 0.059999999)
('step', 19200, 'training accuracy', 0.12)
('step', 19300, 'training accuracy', 0.14)
('step', 19400, 'training accuracy', 0.079999998)
('step', 19500, 'training accuracy', 0.039999999)
('step', 19600, 'training accuracy', 0.16)
('step', 19700, 'training accuracy', 0.1)
('step', 19800, 'training accuracy', 0.079999998)
('step', 19900, 'training accuracy', 0.1)
('test accuracy', 0.097999997)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吭历,一起剝皮案震驚了整個濱河市堕仔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌晌区,老刑警劉巖摩骨,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異朗若,居然都是意外死亡恼五,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門哭懈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來灾馒,“玉大人,你說我怎么就攤上這事遣总〔锹蓿” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵旭斥,是天一觀的道長容达。 經(jīng)常有香客問我,道長垂券,這世上最難降的妖魔是什么花盐? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮圆米,結(jié)果婚禮上卒暂,老公的妹妹穿的比我還像新娘啄栓。我一直安慰自己娄帖,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布昙楚。 她就那樣靜靜地躺著近速,像睡著了一般。 火紅的嫁衣襯著肌膚如雪堪旧。 梳的紋絲不亂的頭發(fā)上削葱,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音淳梦,去河邊找鬼析砸。 笑死,一個胖子當著我的面吹牛爆袍,可吹牛的內(nèi)容都是我干的首繁。 我是一名探鬼主播作郭,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼弦疮!你這毒婦竟也來了夹攒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤胁塞,失蹤者是張志新(化名)和其女友劉穎咏尝,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啸罢,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡编检,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了扰才。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒙谓。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖训桶,靈堂內(nèi)的尸體忽然破棺而出累驮,到底是詐尸還是另有隱情,我是刑警寧澤舵揭,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布谤专,位于F島的核電站,受9級特大地震影響午绳,放射性物質(zhì)發(fā)生泄漏置侍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一拦焚、第九天 我趴在偏房一處隱蔽的房頂上張望蜡坊。 院中可真熱鬧,春花似錦赎败、人聲如沸秕衙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽据忘。三九已至,卻和暖如春搞糕,著一層夾襖步出監(jiān)牢的瞬間勇吊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工窍仰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留汉规,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓驹吮,卻偏偏與公主長得像针史,于是被迫代替她去往敵國和親膏燕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

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

  • CNN on TensorFlow 本文大部分內(nèi)容均參考于: An Intuitive Explanation o...
    _Randolph_閱讀 7,698評論 2 31
  • 聲明:作者翻譯論文僅為學(xué)習(xí)悟民,如有侵權(quán)請聯(lián)系作者刪除博文坝辫,謝謝! 翻譯論文匯總:https://github.com...
    SnailTyan閱讀 12,307評論 1 27
  • 一個殺千刀的公眾號推薦了這本書射亏,說是很牛 但是近忙,他話沒說全:很牛,但是很嚇人好嗎智润!我一個看了11季200來集犯罪心...
    遠山夕顏閱讀 510評論 0 0
  • 秋曉以月葉落黃及舍,千家燈火,月下家書淚幾行窟绷。綿綿恨秋意锯玛,月光光,誰人黑夜咫兼蜈。 夢里猶行山河徜攘残,萬般坎坷,輕輕呢喃溫柔...
    狼云千里閱讀 133評論 0 0
  • 1为狸、人生最幸福的能力--執(zhí)行力芍碧,沒有之一抽莱。 2、最基本的執(zhí)行力就是流程管理筷凤。流程管理畴博,通俗的說嫩海,就是懂得如何一步一...
    每天慌閱讀 472評論 2 1