【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