02 CNN手寫數(shù)字識(shí)別

cnn:
進(jìn)行卷積運(yùn)算(首先許定義權(quán)重w和偏移b)

#cnn : 1 卷積
# ABC 
# A: 激勵(lì)函數(shù)+矩陣 乘法加法
# A CNN :  pool(激勵(lì)函數(shù)+矩陣 卷積 加法)
# C:激勵(lì)函數(shù)+矩陣 乘法加法(A-》B)
# C:激勵(lì)函數(shù)+矩陣 乘法加法(A-》B) + softmax(矩陣 乘法加法)
# loss:tf.reduce_mean(tf.square(y-layer2))
# loss:code
#1 import 
import tensorflow as tf
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data
# 2 load data
mnist = input_data.read_data_sets('MNIST_data',one_hot = True)

# 3 input  輸入數(shù)據(jù)
imageInput = tf.placeholder(tf.float32,[None,784]) # 28*28 
labeInput = tf.placeholder(tf.float32,[None,10]) # knn

# 4 data reshape  數(shù)據(jù)維度的調(diào)整
# [None,784]->M*28*28*1  2D->4D  28*28 wh 1 channel 
#將2維[None,784] 調(diào)整為4維 M*28*28*1 (28*28表示圖片寬高探颈;1表示讀取灰度圖像蜂怎,1為灰色通道楼熄;經(jīng)過轉(zhuǎn)換后的剩余的元素共同構(gòu)成M) 
imageInputReshape = tf.reshape(imageInput,[-1,28,28,1])

# 5 卷積 w0 : 卷積內(nèi)核 5*5 out:32  in:1 
w0 = tf.Variable(tf.truncated_normal([5,5,1,32],stddev = 0.1))#服從正態(tài)分布的數(shù)據(jù)([最終生產(chǎn)數(shù)據(jù)的維度],期望方差)卷積運(yùn)算的內(nèi)核大小5*5牌借,輸入維度1骄崩,可認(rèn)為是上面那1個(gè)灰色通道校哎,32表明是32維度
b0 = tf.Variable(tf.constant(0.1,shape=[32]))  #定義一個(gè)常量,其維度為32

# 6 # layer1:激勵(lì)函數(shù)+卷積運(yùn)算 conv2d (輸入輸出很難保證線性滔蝉,所以采用激勵(lì)函數(shù)击儡,保證非線性)
# imageInputReshape : M*28*28*1  w0: 5,5,1,32  
#tf.nn.conv2d(輸入圖像數(shù)據(jù),權(quán)重矩陣蝠引,每次移動(dòng)的步長(zhǎng)阳谍,'SAME'表示卷積核可以停留在圖像邊緣)
#relu : 激勵(lì)函數(shù)
layer1 = tf.nn.relu(tf.nn.conv2d(imageInputReshape,w0,strides=[1,1,1,1],padding='SAME')+b0)
#layer1的大兄瘛: M*28*28*32

# (考慮數(shù)據(jù)太大,添加池化層)pool是完成下采樣 數(shù)據(jù)量減少很多:  M*28*28*32 --> M*7*7*32 這些數(shù)表示維度(ksize=[1,4,4,1],那么:M/1=1,28/4=7,28/4=7,32/1=32)
#tf.nn.max_pool(池化數(shù)據(jù)矫夯,池化縮小程度鸽疾,池化層步長(zhǎng),'SAME'能夠停留在池化層邊緣)
layer1_pool = tf.nn.max_pool(layer1,ksize=[1,4,4,1],strides=[1,4,4,1],padding='SAME')
# [1 2 3 4]->[4]  (max_pool表示: 例如將4維[1 2 3 4]池化成1維训貌,一維的數(shù)據(jù)制肮;來源于最大值,則池化后為[4])

#以下開始實(shí)現(xiàn)輸出層
# 7 layer2 out : 激勵(lì)函數(shù)+乘加運(yùn)算:  softmax(激勵(lì)函數(shù) + 乘加運(yùn)算)
#softmax為回歸函數(shù)旺订,用來計(jì)算輸出值
# [7*7*32,1024]    tf.truncated_normal([數(shù)據(jù)維度]弄企,方差=0.1)
w1 = tf.Variable(tf.truncated_normal([7*7*32,1024],stddev=0.1))
b1 = tf.Variable(tf.constant(0.1,shape=[1024]))
#維度轉(zhuǎn)換
h_reshape = tf.reshape(layer1_pool,[-1,7*7*32])# M*7*7*32 -> N*N1(將4維轉(zhuǎn)換為2維)
# [N*7*7*32] * [7*7*32,1024] = N*1024 (進(jìn)行矩陣相乘)
h1 = tf.nn.relu(tf.matmul(h_reshape,w1)+b1) #激勵(lì)函數(shù)+乘加運(yùn)算matmul


# 7.1 softMax   tf.truncated_normal([數(shù)據(jù)維度],方差 = 0.1)
w2 = tf.Variable(tf.truncated_normal([1024,10],stddev=0.1))
b2 = tf.Variable(tf.constant(0.1,shape=[10]))
pred = tf.nn.softmax(tf.matmul(h1,w2)+b2)# N*1024  1024*10 = N*10
# N*10( 概率 )N1【0.1 0.2 0.4 0.1 0.2 区拳。拘领。∮5鳎】  N表示n張圖片约素,10表示預(yù)測(cè)在0-9分布的概率
# label。        【0 0 0 0 1 0 0 0.笆凌。圣猎。】
loss0 = labeInput*tf.log(pred)#對(duì)結(jié)果進(jìn)行壓縮乞而,得到唯一的標(biāo)識(shí)1送悔,但此時(shí)任然是10維的數(shù)據(jù),需要累加成1維
loss1 = 0
# 7.2 
for m in range(0,500):#  test 500爪模,進(jìn)行測(cè)試時(shí)欠啤,每次給500張,
    for n in range(0,10):    #將10個(gè)維度的數(shù)據(jù)進(jìn)行累加
        loss1 = loss1 - loss0[m,n]  #這里得到的是正數(shù)屋灌,在使用梯度下降法時(shí)洁段,要變成-號(hào)
loss = loss1/500  #除以500組數(shù)據(jù)

# 8 train 開始訓(xùn)練,采用梯度下降共郭,每次下降0.01.盡可能縮小當(dāng)前的loss
train = tf.train.GradientDescentOptimizer(0.01).minimize(loss)

# 9 run
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for i in range(100):
        images,labels = mnist.train.next_batch(500)
        sess.run(train,feed_dict={imageInput:images,labeInput:labels})
        
        pred_test = sess.run(pred,feed_dict={imageInput:mnist.test.images,labeInput:labels})
        acc = tf.equal(tf.arg_max(pred_test,1),tf.arg_max(mnist.test.labels,1))
        acc_float = tf.reduce_mean(tf.cast(acc,tf.float32))
        acc_result = sess.run(acc_float,feed_dict={imageInput:mnist.test.images,labeInput:mnist.test.labels})
        print(acc_result)
        


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末祠丝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子除嘹,更是在濱河造成了極大的恐慌写半,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尉咕,死亡現(xiàn)場(chǎng)離奇詭異叠蝇,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)龙考,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門蟆肆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矾睦,“玉大人,你說我怎么就攤上這事炎功∶度撸” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵蛇损,是天一觀的道長(zhǎng)赁温。 經(jīng)常有香客問我,道長(zhǎng)淤齐,這世上最難降的妖魔是什么股囊? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮更啄,結(jié)果婚禮上稚疹,老公的妹妹穿的比我還像新娘。我一直安慰自己祭务,他們只是感情好内狗,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著义锥,像睡著了一般柳沙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拌倍,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天赂鲤,我揣著相機(jī)與錄音,去河邊找鬼柱恤。 笑死数初,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的膨更。 我是一名探鬼主播妙真,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼缴允,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼荚守!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起练般,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤矗漾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后薄料,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敞贡,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年摄职,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了誊役。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片获列。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蛔垢,靈堂內(nèi)的尸體忽然破棺而出击孩,到底是詐尸還是另有隱情,我是刑警寧澤鹏漆,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布巩梢,位于F島的核電站,受9級(jí)特大地震影響艺玲,放射性物質(zhì)發(fā)生泄漏括蝠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一饭聚、第九天 我趴在偏房一處隱蔽的房頂上張望忌警。 院中可真熱鬧,春花似錦秒梳、人聲如沸慨蓝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽礼烈。三九已至,卻和暖如春婆跑,著一層夾襖步出監(jiān)牢的瞬間此熬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工滑进, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留犀忱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓扶关,卻偏偏與公主長(zhǎng)得像阴汇,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子节槐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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