TensorFlow學(xué)習(xí)5:神經(jīng)網(wǎng)絡(luò)優(yōu)化

神經(jīng)元模型

用數(shù)學(xué)公式表示為:

f為激活函數(shù)既们。引入非線性激活因素濒析,提高模型的表達力。
常見的激活函數(shù)有relu啥纸,sigmoid号杏,tanh等。

損失函數(shù)

用來預(yù)測表示預(yù)測值(y)與已知答案(y_)的差距斯棒。在訓(xùn)練神經(jīng)網(wǎng)絡(luò)時盾致,通過不斷改變神經(jīng)網(wǎng)絡(luò)中的所有參數(shù),使損失函數(shù)不斷減小荣暮,從而訓(xùn)練出更高準確率的神經(jīng)網(wǎng)絡(luò)模型谨垃。
常用的損失函數(shù)有均方誤差敞峭,自定義和交叉熵等怀吻。

代碼示例1

預(yù)測酸奶日銷售量y框仔, x1和x2為影響日銷售量的兩個因素。
利用TensorFlow中的函數(shù)隨機生成x1砾跃,x2骏啰,制造標(biāo)準答案y_=x1+x2,為了更真實蜓席,求和后還加了正負0.05的隨機噪音器一。

#coding:utf-8
#預(yù)測多或預(yù)測少的影響一樣
import tensorflow as tf
import numpy as np
BATCH_SIZE=8
seed=23455

#基于seed產(chǎn)生隨機數(shù)
rng=np.random.RandomState(seed)
#隨機數(shù)返回32行2列的矩陣 表示32組 體積和重量 作為輸入數(shù)據(jù)集
X=rng.rand(32,2)
#作為輸入數(shù)據(jù)集的標(biāo)簽(正確答案)
Y=[[int(x0+x1+(rng.rand()/10.0-0.05))] for (x0,x1) in X]
print "X:\n",X
print "Y:\n",Y

#定義神經(jīng)網(wǎng)絡(luò)的輸入 參數(shù)和輸出课锌,定義前向傳播過程厨内。
x=tf.placeholder(tf.float32,shape=(None,2))
y_=tf.placeholder(tf.float32,shape=(None,1))

w1=tf.Variable(tf.random_normal([2,1],stddev=1,seed=1))

#定義向前傳播過程   
y=tf.matmul(x,w1)

#定義損失函數(shù)及反向傳播方法
loss=tf.reduce_mean(tf.square(y_-y))
train_step=tf.train.GradientDescentOptimizer(0.001).minimize(loss)

#生成會話,訓(xùn)練STEPS  
with tf.Session() as sess:
    init_op=tf.initialize_all_variables()
    sess.run(init_op)
    #輸出目前(未經(jīng)訓(xùn)練)的參數(shù)取值      
    print "w1:\n",sess.run(w1)
    print "\n"
    #訓(xùn)練模型
    STEPS=20000
    for i in range(STEPS):
        start=(i*BATCH_SIZE)%32
        end=start+BATCH_SIZE
        sess.run(train_step,feed_dict={x: X[start:end],y_: Y[start:end]})
        if(i%5000)==0:
            print "w1:\n",sess.run(w1)
            #輸出訓(xùn)練后的參數(shù)取值
            print "\n"
    print "w1:\n",sess.run(w1)

但是我這邊測試跑出來的結(jié)果跟教程里的不一樣渺贤,x1離標(biāo)準答案1差的比較遠雏胃。(這個問題后續(xù)再研究)

自定義損失函數(shù)

損失函數(shù)表示,若預(yù)測結(jié)果y小于標(biāo)準答案y_志鞍,損失函數(shù)為利潤乘以預(yù)測結(jié)果y與標(biāo)準答案y_之差瞭亮;
若預(yù)測結(jié)果y大于標(biāo)準答案y_,損失函數(shù)為成本乘以預(yù)測結(jié)果y與標(biāo)準答案y_之差固棚。

將損失函數(shù)修改如下:
loss=tf.reduce_sum(tf.select(tf.greater(y,y_),(y-y_)1,(y_-y)9))

教程中為where统翩,應(yīng)該是版本問題,這邊改成select

交叉熵(Cross Entropy)

表示兩個概率分布之間的距離此洲。交叉熵越大厂汗,兩個概率分布距離越遠,兩個概率分布越相異呜师;交叉熵越小娶桦,兩個概率分布距離越近,兩個概率分布越相似。

損失函數(shù)如下:
ce=tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=tf.argmax(y_,1))
loss=tf.reduce_mean(ce)

學(xué)習(xí)率(learning_rate)

表示了每次參數(shù)更新的幅度大小衷畦。學(xué)習(xí)率過大栗涂,會導(dǎo)致待優(yōu)化的參數(shù)在最小值附近波動,不收斂祈争;學(xué)習(xí)率過小斤程,會導(dǎo)致待優(yōu)化的參數(shù)收斂緩慢。

示例代碼2

#coding:utf-8
#設(shè)損失函數(shù) loss=(w+1)^2菩混,令w初值為常數(shù)5暖释。反向傳播就是求最優(yōu)w,即求最小loss對應(yīng)的w值
import tensorflow as tf
#定義待優(yōu)化參數(shù)w初始值5
w=tf.Variable(tf.constant(5,dtype=tf.float32))
#定義損失函數(shù)
loss=tf.square(w+1)
#定義反向傳播方法
train_step=tf.train.GradientDescentOptimizer(0.2).minimize(loss)
#生成會話墨吓,訓(xùn)練40輪
with tf.Session() as sess:
    init_op=tf.initialize_all_variables()
    sess.run(init_op)
    for i in range(40):
        sess.run(train_step)
        w_val=sess.run(w)
        loss_val=sess.run(loss)
        print "After %s steps: w is %f,loss is %f."%(i,w_val,loss_val)
        

指數(shù)衰減學(xué)習(xí)率
學(xué)習(xí)率隨著訓(xùn)練輪數(shù)變化而動態(tài)更新

tf里的代碼為:

LEARNING_RATE_BASE=0.1 #最初學(xué)習(xí)率
LEARNING_RATE_DECAY=0.99 #學(xué)習(xí)率衰減率
LEARNING_RATE_STEP =1 #喂入多少輪BATCH_SIZE后球匕,更新一次學(xué)習(xí)率,一般設(shè)為:總樣本數(shù)/BATCH_SIZE

#運行了幾輪BATCH_SIZE的計數(shù)器帖烘,初值為0亮曹,設(shè)為不被訓(xùn)練
global_step=tf.Variable(0,trainable=False)
#定義指數(shù)下降學(xué)習(xí)率
learning_rate=tf.train.exponential_decay(LEARNING_RATE_BASE,global_step,LEARNING_RATE_STEP,LEARNING_RATE_DECAY,staircase=True)

滑動平均

記錄了一段時間內(nèi)模型中所有參數(shù)w和b各自的平均值。利用滑動平均值可以增強模型的泛化能力秘症。

過擬合

神經(jīng)網(wǎng)絡(luò)模型在訓(xùn)練數(shù)據(jù)集上的準確率較高照卦,在新的數(shù)據(jù)進行預(yù)測或分類時準確率較低,說明模型的泛化能力差

正則化

在損失函數(shù)中給每個參數(shù)w加上權(quán)重乡摹,引入模型復(fù)雜度指標(biāo)役耕,從而抑制模型噪聲,減少過擬合聪廉。

參考:人工智能實踐:Tensorflow筆記

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瞬痘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子板熊,更是在濱河造成了極大的恐慌框全,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件干签,死亡現(xiàn)場離奇詭異津辩,居然都是意外死亡,警方通過查閱死者的電腦和手機容劳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門喘沿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人竭贩,你說我怎么就攤上這事蚜印。” “怎么了娶视?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵晒哄,是天一觀的道長睁宰。 經(jīng)常有香客問我,道長寝凌,這世上最難降的妖魔是什么柒傻? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮较木,結(jié)果婚禮上红符,老公的妹妹穿的比我還像新娘。我一直安慰自己伐债,他們只是感情好预侯,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著峰锁,像睡著了一般萎馅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上虹蒋,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天糜芳,我揣著相機與錄音,去河邊找鬼魄衅。 笑死峭竣,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的晃虫。 我是一名探鬼主播皆撩,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼哲银!你這毒婦竟也來了扛吞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤盘榨,失蹤者是張志新(化名)和其女友劉穎喻粹,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體草巡,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年型酥,在試婚紗的時候發(fā)現(xiàn)自己被綠了山憨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡弥喉,死狀恐怖郁竟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情由境,我是刑警寧澤棚亩,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布蓖议,位于F島的核電站,受9級特大地震影響讥蟆,放射性物質(zhì)發(fā)生泄漏勒虾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一瘸彤、第九天 我趴在偏房一處隱蔽的房頂上張望修然。 院中可真熱鬧,春花似錦质况、人聲如沸愕宋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽中贝。三九已至,卻和暖如春臼朗,著一層夾襖步出監(jiān)牢的瞬間雄妥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工依溯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留老厌,地道東北人。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓黎炉,卻偏偏與公主長得像枝秤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子慷嗜,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355

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