tf.losses模塊下的tf.reduction

下面以常用的softmax_cross_entropy() 函數爲例,做一個詳細介紹。

tf.losses.softmax_cross_entropy(
    onehot_labels,  # 注意此處參數名就叫 onehot_labels
    logits,
    weights=1.0,
    label_smoothing=0,
    scope=None,
    loss_collection=tf.GraphKeys.LOSSES,
    reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
)

Args:

  1. onehot_labels: [batch_size, num_classes] one_hot類型的label.
  2. logits: [batch_size, num_classes] 神經網絡的logits輸出. 這兩個參數都沒什麼好解釋的,最基本的知識。
  3. weights: 爲可選參數,首先它是tensor 然後它可以是一個標量(此時作爲loss的係數),也可以是一個[batch_size]的向量(看源碼我個人理解就是對一個batch的樣本進行加權,不知道有什麼意義,因爲一般來說訓練樣本的輸入順序是隨機的,即每一個batch的樣本全部都是隨機的,這中情況下這個加權沒有任何意義了)
  4. label_smoothing: 這個參數如果設置大於0,則對label進行平滑,平滑的公式爲:
  5. new_onehot_labels = onehot_labels*(1-label_smoothing) + label_smoothing/num_classes
  6. scope: 命名空間
  7. loss_collection: 指定loss集合。
  8. reduction: 指定應用到這個loss的reduction類型.
  • NONE: Un-reduced weighted losses with the same shape as input.
  • SUM: Scalar sum of weighted losses.
  • MEAN: Scalar ‘SUM’ divided by sum of weights.
  • SUM_OVER_BATCH_SIZE: Scalar ‘SUM’ divided by number of elements in losses.
  • SUM_OVER_NONZERO_WEIGHTS: Scalar ‘SUM’ divided by number of non-zero weights.
  • SUM_BY_NONZERO_WEIGHTS: Same as ‘SUM_OVER_NONZERO_WEIGHTS’(注意:在損失函數中weights=1.0, 對應這裏的weighted_sum_by_nonzero_weights,配合起來就是求和)

reduction一般都是使用SUM_BY_NONZERO_WEIGHTS,不過需要注意的是設置這個參數的時候是:reduction=tf.losses.Reduction.MEAN
 

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