Tensorflow:實戰(zhàn)Google深度學(xué)習(xí)框架第四章

一介紹

該章主要是介紹深層網(wǎng)絡(luò), 該章節(jié)主要按照損失函數(shù),優(yōu)化技巧倆部分進(jìn)行展開。


二 損失函數(shù)

在損失函數(shù)介紹幾種經(jīng)典損失函數(shù):

1. 交叉熵:刻畫了倆個概率分布之間的距離,它是分類問題中使用比較廣的一種損失函數(shù),計算公式如下:

? ? ? ? ? ? ? ? ? ?H(p,q) = -\sum_{x}p(x)log(q(x))

注意:H(p,q) != H(q, p)即交叉熵不滿足對稱性,它刻畫的是通過概率分布q來表達(dá)概率分布p的困難程度。因為正確答案是希望得到的結(jié)果,所以當(dāng)交叉熵作為損失函數(shù)時,P代表的是正確答案, q代表的是預(yù)測值。交叉熵刻畫的是倆個概率分布的距離,也就是說交叉熵值越小,倆個概率分布越接近。

tips: 因為log x,如果x小于等于0會報錯,所以在損失函數(shù)需要注意這種情況,在tensorlow中tf.clip_by_value可以將一個張量中的數(shù)值控制在一個范圍內(nèi)。

clip_by_value

2. 自定義損失函數(shù):根據(jù)需要,需要自己定義損失函數(shù),比如:當(dāng)x>y時:\qquad     \qquad   \qquad    f(x, y)=\left\{\begin{aligned}a(x-y) & & x>y\\b(y-x) & & x\leq  y\end{aligned}\right.

tips:需要用到tf.greater()以及tf.where

 loss = tf.reduce\_sum(tf.where(tf.greater(v1,v2),(v1-v2)*a, (v2-v1)*b))

tf.where 有三個參數(shù)。第一個為選擇條件依據(jù),當(dāng)選擇條件為true時,tf.where函數(shù)會選擇第二個參數(shù)中的值,否則使用第三個參數(shù)中的值。

三神經(jīng)網(wǎng)絡(luò)優(yōu)化算法

3.1 學(xué)習(xí)率設(shè)置

學(xué)習(xí)率決定了參數(shù)更新的幅度。如果幅度過大,那么可能導(dǎo)致參數(shù)在極優(yōu)值的倆側(cè) 來回移動。為了設(shè)置合理的學(xué)習(xí)率,在本書中提到了指數(shù)衰減法。tf.train.exponential_decay。原理是可以先使用較大的學(xué)習(xí)率來得到一個比較優(yōu)的解,然后隨著迭代的繼續(xù)逐步減小學(xué)習(xí)率。主要是事先的是:decayed\_learning\_rate = learning\_rate * decay\_rate^{global\_step / decay\_steps}? ? ? ? ?learning_rate表示學(xué)習(xí)率, decay_rate表示衰減系數(shù),decay_steps為衰減速度? ? ? ? ? ? ? ? ? ? ? ?tips:函數(shù)還有一個參數(shù)staircase布爾型, 如果為 true表示在一個數(shù)據(jù)集內(nèi)學(xué)習(xí)率是一樣的,即decay_rate的指數(shù)取整

3.2 過擬合問題

過擬合問題表示在訓(xùn)練集訓(xùn)練的太好,將噪音數(shù)據(jù)都學(xué)出來了,在驗證集上的表現(xiàn)卻太差。為了讓模型的結(jié)構(gòu)不至于負(fù)責(zé)。引入了正則化的概念。

L1:????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????R(w) = \vert \vert w\vert \vert_1  = \sum_{i}\vert x_i \vert

L2:

? ?????????????????????????????????????????????R(w) = ||W||_2^2 = \sum_{i}|W_i^2|

將正則化添加到損失函數(shù),可以有效避免過擬合的問題。tensorflow中正則化的表達(dá)式為tf.contrib.layers.l2_regularizer(lambda),lambda為權(quán)重。

正則化損失函數(shù)的計算方式

3.3 滑動平均模型

在tensorflow提供tf.train.ExponentialMovingAverage來實現(xiàn)滑動平均模型。 該函數(shù)就是給每一個變量維護(hù)一個影子變量。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?????????????????shadow\_variable = decay * shadow + (1-decay)*variable? ? ? ? ? ? tips: decay衰減率控制模型更新速度。如果函數(shù)參數(shù)中有step參數(shù),即模型迭代次數(shù),衰減率為:????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????min(decay, \frac{1+step}{10+step})? ? ? ? ? ? ??

具體代碼如下:

滑動平均模型

四 總結(jié)

該部分主要介紹了一些trick,可以提高模型的穩(wěn)定性,避免過擬合。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容