tensorflow常用優化器與損失函數
優化器
- tf.train.GradientDescentOptimizer 實現梯度下降算法的優化器。
- tf.train.AdadeltaOptimizer 實現Adadelta算法的優化器。
- tf.train.AdagradOptimizer 實現Adagrad算法的優化器。
- tf.train.AdagradDAOptimizer 實現稀疏線性模型的Adagrad對偶平均算法優化器。
- tf.train.MomentumOptimizer 實現動量算法的優化器。
- tf.train.AdamOptimizer 實現Adam算法的優化器。
- tf.train.FtrlOptimizer 實現FTRL算法的優化優化器。
- tf.train.ProximalGradientDescentOptimizer 實現近端梯度下降算法的優化器。
- tf.train.ProximalAdagradOptimizer 實現近端Adagrad算法的優化程序。
- tf.train.RMSPropOptimizer 實現RMSProp算法的優化程序。
損失函數
absolute_difference(…):在訓練過程中添加絕對差值loss.
add_loss(…):爲損失集合添加外部定義的loss.
compute_weighted_loss(…):計算加權loss.
cosine_distance(…):在訓練過程中添加餘弦距離loss.(不贊成的參數)
get_losses(…):獲取loss_collection的loss列表.
regularization_loss(…):獲取總正規化loss.
get_regularization_losses(…):獲取正則化loss列表.
get_total_loss(…):返回其值表示總loss的張量.
hinge_loss(…):在訓練過程中添加hinge loss.
huber_loss(…):在訓練過程中添加Huber Loss.
log_loss(…):向訓練過程中添加Log Loss.
mean_pairwise_squared_error(…):在訓練過程中添加成對誤差平方loss(pairwise-errors-squared loss).
mean_squared_error(…):在訓練過程中添加平方和loss(Sum-of-Squares loss).
sigmoid_cross_entropy(…):使用tf.nn.sigmoid_cross_entropy_with_logits創建交叉熵loss.
softmax_cross_entropy(…):使用tf.nn.softmax_cross_entropy_with_logits創建交叉熵loss.
sparse_softmax_cross_entropy(…):使用tf.nn.sparse_softmax_cross_entropy_with_logits創建交叉熵loss.
tf.losses.absolute_difference函數
tf.losses.absolute_difference(
labels,
predictions,
weights=1.0,
scope=None,
loss_collection=tf.GraphKeys.LOSSES,
reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
)
定義在:tensorflow/python/ops/losses/losses_impl.py.
在訓練過程中添加絕對差值loss.
weights作爲loss的係數.如果提供了標量,那麼損失只是按給定值進行縮放.如果weights是形狀爲[batch_size]的Tensor,則批次中每個樣品的總loss由weights向量中的相應元素重新調整.如果weights的形狀與predictions的形狀匹配,則每個predictions的預測元素的loss由相應的weights值縮放.
參數:
- labels:真實的輸出張量,與“predictions”具有相同的維度.
- predictions:預測的產出.
- weights:可選的Tensor,其秩爲0或與labels具有相同的秩,並且必須可廣播到labels(即,所有維度必須爲1,或者與相應的losses維度相同).
- scope:計算loss時執行的操作範圍. loss_collection:將添加此loss的集合.
- reduction:適用於loss的減少類型.
返回:
該函數返回加權loss浮動Tensor.如果reduction是NONE,則它的形狀與labels相同;否則,它是標量.
可能引發的異常:
- ValueError:如果predictions的形狀與labels不匹配,或者weights的形狀是無效的,或者labels、predictions是None.
tf.losses.add_loss函數
tf.losses.add_loss(
loss,
loss_collection=tf.GraphKeys.LOSSES
)
定義在:tensorflow/python/ops/losses/util.py.
將外部定義的loss添加到losses的集合中.
參數:
- loss:一個表示loss的Tensor.
- loss_collection:一個可選的集合以添加loss.
tf.losses.compute_weighted_loss函數
tf.losses.compute_weighted_loss(
losses,
weights=1.0,
scope=None,
loss_collection=tf.GraphKeys.LOSSES,
reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
)
定義在:tensorflow/python/ops/losses/losses_impl.py.
計算加權loss.
參數:
- losses:形狀爲[batch_size, d1, … dN]的Tensor.
- weights:可選的,其秩爲0或與losses具有相同等級的Tensor,並且必須可廣播到losses(即,所有維度必須爲1或者與相應的losses維度相同).
- scope:計算loss時執行的操作範圍.
- loss_collection:loss將被添加到這些集合中.
- reduction:適用於loss的減少類型.
返回:
與losses相同類型的加權損失Tensor,如果reduction是NONE,它的形狀與losses相同;否則,它是標量.
可能引發的異常:
- ValueError:如果weights是None,或者與losses的形狀不兼容,或者是否存在losses或weights缺少維度(秩)的數量.
tf.losses.get_regularization_loss函數
tf.losses.get_regularization_loss(
scope=None,
name='total_regularization_loss'
)
定義在:tensorflow / python / ops / losses / util.py。
作用;獲得總正則化損失。
參數:
scope:用於過濾要返回的損耗的任選範圍名稱。
name:返回張量的名稱。
返回:
標量正則化損失。
tf.losses.sigmoid_cross_entropy函數
tf.losses.sigmoid_cross_entropy(
multi_class_labels,
logits,
weights=1.0,
label_smoothing=0,
scope=None,
loss_collection=tf.GraphKeys.LOSSES,
reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
)
定義在:tensorflow / python / ops / losses / losses_impl.py。
作用:
使用tf.nn.sigmoid_cross_entropy_with_logits創建交叉熵。
weights作爲損耗的係數。如果提供了標量,那麼損耗只是按給定值進行縮放。如果weights是形狀爲[batch_size]的張量,則損耗權重適用於每個相應的樣本。
如果label_smoothing非零,則將標籤平滑爲1/2:
tf.losses.softmax_cross_entropy函數
tf.losses.softmax_cross_entropy(
onehot_labels,
logits,
weights=1.0,
label_smoothing=0,
scope=None,
loss_collection=tf.GraphKeys.LOSSES,
reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
)
定義在:tensorflow / python / ops / losses / losses_impl.py。
使用tf.nn.softmax_cross_entropy_with_logits創建交叉熵(交叉熵)損失。
weights作爲損耗的係數。如果提供了標量,那麼損耗只是按給定值縮放。如果weights是形狀爲[batch_size]的張量,則損耗權重適用於每個相應的樣本。
如果label_smoothing非零,則將標籤平滑爲:1 / num_classes:new_onehot_labels = onehot_labels *(1-label_smoothing)+ label_smoothing / num_classes
參數:
onehot_labels:[batch_size,num_classes]個目標是一個熱編碼標籤。
logits:[batch_size,num_classes]個logits網絡的輸出。
重量:任選的張量,其等級爲0或1,並且可以廣播到形狀爲[batch_size]的張量的損耗。
label_smoothing:如果大於0,則平滑標籤。
scope:計算損失時執行的操作範圍。
loss_collection:將添加損失的集合。
減少:適用於損失的減少類型。
返回:
如果減少是NONE,這有形狀[batch_size];否則,它是標量。
可能引發的異常:
ValueError:如果logits的形狀與onehot_labels不匹配,或weights的形狀無效,或者如果weights是None,如果onehot_labels或logits是None。
未完待續…