損失函數 對比 曲度 收斂 平滑


 

【1】

L2正則損失函數、歐拉損失函數:預測值與目標差值的平方和

   在目標值附近有更好的曲度,離目標越近收斂越慢

 

 

 

 

【2】

 L1正則損失函數,絕對值損失函數 

  在目標值附近不平滑,導致算法不能很好地收斂

 

 

【1】【2】代碼

 

import matplotlib.pyplot as plt
import tensorflow as tf

sess = tf.Session()
x_vals = tf.linspace(-1., 1., 500)
target = tf.constant(0.)
l2_y_vals = tf.square(target - x_vals)
l2_y_out = sess.run(l2_y_vals)

  

 

 【3】

Pseudo-Huber損失函數是 Huber損失函數的連續、平滑估計,師徒利用L1和L2正則雪見極值處的陡峭,使得目標值附近連續。

它的表達式依賴delta。

 

 

 

 【4】分類損失函數

用來評估預測分類結果

 

 

 【5】

Hinge 損失函數 主要用來評估支持向量機算法,也用來評估神經網絡算法

 

本例中,計算兩個目標類(-1,1) 之間的損失,使用目標值1,故預測距離值1越近,

 

 

【6】兩類交叉熵損失函數  邏輯損失函數

Cross-entropy loss

 當預測2類目標0或者1時,希望度量預測值到真實分類值(0或者1)的距離,這個距離經常是0到1之間的實數。為了度量這個距離,我們可以使用信息論匯總的交叉熵。

 

 【7】Sigmoid損失函數 Sigmoid cross entropy loss 與兩類交叉熵損失函數類是,不同的是,它先把x_vals的值通過sigmoid函數轉換,再計算交叉熵損失

 

 

import matplotlib.pyplot as plt
import tensorflow as tf

sess = tf.Session()
x_vals = tf.linspace(-1., 1., 500)
target = tf.constant(0.)

l2_y_vals = tf.square(target - x_vals)
l2_y_out = sess.run(l2_y_vals)

l1_y_vals = tf.abs(target - x_vals)
l1_y_out = sess.run(l1_y_vals)

delta1 = tf.constant(0.25)
phuber1_y_als = tf.multiply(tf.square(delta1), tf.sqrt(1. + tf.square((target - x_vals) / delta1)) - 1.)
phuber1_y_out = sess.run(phuber1_y_als)

delta2 = tf.constant(5.)
phuber2_y_als = tf.multiply(tf.square(delta2), tf.sqrt(1. + tf.square((target - x_vals) / delta2)) - 1.)
phuber2_y_out = sess.run(phuber2_y_als)

x_vals = tf.linspace(-3., 5., 500)
target = tf.constant(1.)
targets = tf.fill([500, ], 1.)

hinge_y_vals = tf.maximum(0., 1. - tf.multiply(target, x_vals))
hinge_y_out = sess.run(hinge_y_vals)

# [i for i  in xentropy_y_out if not sess.run(tf.is_nan(i))]
xentropy_y_vals = -tf.multiply(target, tf.log(x_vals)) - tf.multiply((1. - target), tf.log(1. - x_vals))
xentropy_y_out = sess.run(xentropy_y_vals)
not_nan = [i for i in xentropy_y_out if not sess.run(tf.is_nan(i))]

# logits and targets must have the same type and shape.
# ValueError: Only call `sigmoid_cross_entropy_with_logits` with named arguments (labels=..., logits=..., ...)
# xentropy_sigmoid_y_vals = tf.nn.sigmoid_cross_entropy_with_logits(x_vals, logits=targets)
# sess.run(tf.nn.sigmoid_cross_entropy_with_logits(labels=x_vals, logits=targets))
xentropy_sigmoid_y_vals = tf.nn.sigmoid_cross_entropy_with_logits(labels=x_vals, logits=targets)
xentropy_sigmoid_y_out = sess.run(xentropy_sigmoid_y_vals)

dd = 9

 

 

【8】加權交叉熵損失函數 Weighted cross entropy loss 是Sigmoid交叉熵損失函數的加權,對正目標加權

本例中,對正目標加權權重0.5

 

 

【9】Softmax交叉熵損失函數 Softmax cross-entropy loss 作用於非歸一化的輸出結果,只針對單個目標分類的計算損失。通過softmax函數將輸出結果

轉化成概率分布,然后計算真值概率分布的損失。

 

 

【TOCHECK】 1.16012561

 

【10】稀疏Softmax交叉熵損失函數 Sparse softmax cross-entropy loss 和Softmax交叉熵損失函數類似,它是把目標分類為true的轉化成index,

而Softmax交叉熵損失函數將目標轉成概率分布。

 

 【TOCHECK】0.00012564

 

import matplotlib.pyplot as plt
import tensorflow as tf

sess = tf.Session()
x_vals = tf.linspace(-1., 1., 500)
target = tf.constant(0.)

l2_y_vals = tf.square(target - x_vals)
l2_y_out = sess.run(l2_y_vals)

l1_y_vals = tf.abs(target - x_vals)
l1_y_out = sess.run(l1_y_vals)

delta1 = tf.constant(0.25)
phuber1_y_als = tf.multiply(tf.square(delta1), tf.sqrt(1. + tf.square((target - x_vals) / delta1)) - 1.)
phuber1_y_out = sess.run(phuber1_y_als)

delta2 = tf.constant(5.)
phuber2_y_als = tf.multiply(tf.square(delta2), tf.sqrt(1. + tf.square((target - x_vals) / delta2)) - 1.)
phuber2_y_out = sess.run(phuber2_y_als)

x_vals = tf.linspace(-3., 5., 500)
target = tf.constant(1.)
targets = tf.fill([500, ], 1.)

hinge_y_vals = tf.maximum(0., 1. - tf.multiply(target, x_vals))
hinge_y_out = sess.run(hinge_y_vals)

# [i for i  in xentropy_y_out if not sess.run(tf.is_nan(i))]
xentropy_y_vals = -tf.multiply(target, tf.log(x_vals)) - tf.multiply((1. - target), tf.log(1. - x_vals))
xentropy_y_out = sess.run(xentropy_y_vals)
not_nan = [i for i in xentropy_y_out if not sess.run(tf.is_nan(i))]

# logits and targets must have the same type and shape.
# ValueError: Only call `sigmoid_cross_entropy_with_logits` with named arguments (labels=..., logits=..., ...)
# xentropy_sigmoid_y_vals = tf.nn.sigmoid_cross_entropy_with_logits(x_vals, logits=targets)
# sess.run(tf.nn.sigmoid_cross_entropy_with_logits(labels=x_vals, logits=targets))
xentropy_sigmoid_y_vals = tf.nn.sigmoid_cross_entropy_with_logits(labels=x_vals, logits=targets)
xentropy_sigmoid_y_out = sess.run(xentropy_sigmoid_y_vals)

weight = tf.constant(0.5)
xentropy_weigthed_y_vals = tf.nn.weighted_cross_entropy_with_logits(x_vals, targets, weight)
xentropy_weigthed_y_out = sess.run(xentropy_weigthed_y_vals)

unscaled_logits = tf.constant([1., -3., 10.])
target_dist = tf.constant([0.1, 0.02, 0.88])
softmax_xentropy = tf.nn.softmax_cross_entropy_with_logits_v2(labels=unscaled_logits, logits=target_dist)
print(sess.run(softmax_xentropy))
softmax_xentropy_out = sess.run(softmax_xentropy)

unscaled_logits = tf.constant([1., -3., 10.])
sparse_target_dist = tf.constant([2])
sparse_xentropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=unscaled_logits, logits=sparse_target_dist)
print(sess.run(sparse_xentropy))
sparse_xentropy_out = sess.run(sparse_xentropy)
dd = 9

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM