標籤:

3-04 TensorFlow入門-輸入與優化

經過上面幾個章節的講解,我們知道了使交叉熵減小的辦法是梯度下降,需要對損失函數求導。我們掌握了導數工具之後將面臨兩個問題:我如何將圖像輸入到我的分類器中,以及我何時開始進行我的優化過程?本章節我們將會一一解答。

數值穩定性

數值穩定性是我們必須去關注的話題,因為計算機在處理極大數值和極小數值相加時總是會引入誤差,而這個誤差恰恰會引起我們分類器的錯誤。

我們可以做以下的實驗,在Python中運行這段代碼:

a=1000000000
for i in range(1000000):
a+=1e-6
print(a-1000000000)

按照預期,輸出的結果是1.0,但是經過這些運算之後我們發現其實輸出結果是0.953674316406...,然後我們繼續修改a初始值為更大的值,發現誤差會越來越大。 我們之前也發現了損失函數的輸入矩陣其實非常大,需要經過的計算很多,我們希望這些參與計算的數永遠不要太大或者太小,這就是數值穩定性的意義。其中一個比較好的方法是使我們所有的輸入變數均值為0,並且儘可能同方差。

這樣做的好處除了可以保持數值穩定性之外還可以讓我們在做優化時有較好的數學基礎來快速達到優化結果。不同方差和均值意味著優化器需要搜索很多次才能夠尋找到最優解。

處理圖像輸入

圖像由像素組成,像素表示方法分別為RGB,我們將像素點數值取出,分別將RGB做如下處理

這樣處理後的輸入並沒有改變圖像的內容,但是它使我們更容易優化。

初始化w和b

同時我們也希望我們的權重w和偏置b的初始化遵循從均值為0標準差為sigma的高斯分布中隨機抽樣。

sigma的數值決定了最優化過程中在初始化時的輸出數量級。由於輸出又被softmax處理,這同時也決定了初始化時的概率分布的峰值。 - 大的sigma意味著概率分布有較大的峰值,分類器很武斷 - 小的sigma意味著概率分布比較平均,分類器很謹慎 通常我們都希望開始於一個比較不確定的概率分布,隨著訓練的過程讓分類器變得越來越自信。所以我們應該選取小的sigma給我們的參數進行初始化。

優化過程

我們現在已經確定了分類器的全部輸入以及分類器公式,有了損失函數。我們將整個訓練數據集輸入到分類器中,計算整個數據集的損失平均值。

然後我們使用優化包對損失函數對權重和偏置的求導,進行反向傳播,重複這兩個過程,最終得到最優化的w和b。

完整代碼請關注我的github:

vvchenvv/Self_Driving_Tutorial?

github.com圖標

更多文章請關注我的個人網站:

人工智慧 歸檔 | 思考與積累?

weiweizhao.com


推薦閱讀:

TAG:TensorFlow |