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。

未完待續…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章