深度學習實現時存在的計算精度問題

2021-09-02 20:25:01 字數 702 閱讀 5566

以python語言計算sigmoid和cost函式為例介紹。

a = float('inf')

b = np.log(0) #結果為-inf

-a == b #true

理論上 0.0 < a = sigmoid(z) < 1.0

實際上,對python中的float64型別常量值,

sigmoid(36) == 0.9999999999999998

sigmoid(37) == 1.0

sigmoid(-709) == 1.216780750623423e-308

sigmoid(-710) == 0.0

而在計算代價函式時,需要計算

cost_i = - y*log(a) - (1-y)*log(1-a),由於理論上0.0 < a = sigmoid(z) < 1.0,所以理論上不會出現log(0)的情況。

但在python工程實現時,

出現z>=37時,a為1,log(1-a)就為-inf,此時,若y為0,則cost_i為inf

出現z<=710時,a為0,log(a)就為-inf,此時,若y為1,則cost_i為inf

此時,樣本i是**錯誤的,而且錯誤非常大。但在計算代價時,如果把樣本i的代價加入總代價j,則j也將成為inf。所以,通常計算總代價j時,採用np.nansum(...)來忽略這些極端錯誤的**,但實際上,樣本i錯的程度非常大,而被忽略了。

深度學習存在的問題及解決方法

持續完善中.pyhton 執行時出現的問題以及相應的解決的方法 q1 在編寫python時,當使用中文輸出或注釋時執行指令碼,會提示錯誤資訊 syntaxerror non ascii character xe5 in file home yuan image fingerprint detecti...

計算機視覺 mini深度學習框架實現

手動實現mini深度學習框架,主要精力不放在運算優化上,僅體會原理。位址見 minideepframe tensorflow 卷積層 池化層詳解 科學計算 全連線層 均方誤差 啟用函式實現 layer.py層 class,已實現 全連線層,卷積層,平均池化層 loss.py損失函式 class,已實...

深度學習中的數值計算問題

連續數學在數字計算機上的根本困難 我們需要通過有限數量的位模式來表示無限多的實數。計算機在表示實數時總會引入一些近似誤差,這些捨入誤差會導致上溢和下溢問題。舉例 softmax函式 sof tmax x i exi jn exj softmax x frac e softma x x i jn ex...