【NLP】經常使用損失函數

1.sigmoid_cross_entropy_with_logits

tf.nn.sigmoid_cross_entropy_with_logits(logits=logits, labels=labels)
  • 計算方式:對輸入的logits先經過sigmoid函數計算,再計算它們的交叉熵,可是它對交叉熵的計算方式進行了優化,使得的結果不至於溢出。
  • 適用:每一個類別相互獨立但互不排斥的狀況:例如一幅圖能夠同時包含一條狗和一隻大象。
  • output不是一個數,而是一個batch中每一個樣本的loss,因此通常配合tf.reduce_mean(loss)使用

例:label=[[1,1,0],[0,1,0],[0,0,1]   logits=[[0.6,0.7,0.2],[0.1,0.5,0.2],[0.2,0.1,0.8]]git

2. softmax_cross_entropy_with_logits

tf.nn.softmax_cross_entropy_with_logits(_sentinel=None, labels=None, logits=None, dim=-1, name=None)
  • labels:和logits具備相同type和shape的張量(tensor),,是一個有效的機率,sum(labels)=1, one_hot=True(向量中只有一個值爲1.0,其餘值爲0.0)。
  • 計算方式:對輸入的logits先經過softmax函數計算,再計算它們的交叉熵,可是它對交叉熵的計算方式進行了優化,使得結果不至於溢出。
  • 適用:每一個類別相互獨立且排斥的狀況,一幅圖只能屬於一類,而不能同時包含一條狗和一隻大象。
  • output:不是一個數,而是一個batch中每一個樣本的loss,因此通常配合tf.reduce_mean(loss)使用。

例:函數

y = np.array([[1,0,0],[0,1,0],[0,0,1],[1,0,0],[0,1,0]])# 每一行只有一個1
logits =np.array([[12,3,2],[3,10,1],[1,2,5],[4,6.5,1.2],[3,6,1]])

3. sparse_softmax_cross_entropy_with_logits

tf.nn.sparse_softmax_cross_entropy_with_logits(_sentinel=None,labels=None,logits=None, name=None)
  • labels:shape爲[batch_size],labels[i]是{0,1,2,……,num_classes-1}的一個索引, type爲int32或int64
  • 計算方式:對輸入的logits先經過softmax函數計算,再計算它們的交叉熵,可是它對交叉熵的計算方式進行了優化,使得結果不至於溢出。
  • 適用:每一個類別相互獨立且排斥的狀況,一幅圖只能屬於一類,而不能同時包含一條狗和一隻大象 。
  • output不是一個數,而是一個batch中每一個樣本的loss,因此通常配合tf.reduce_mean(loss)使用。
  • 計算公式:
  • tf.nn.softmax_cross_entropy_with_logits()的計算公式同樣,只是要將labels轉換成tf.nn.softmax_cross_entropy_with_logits()中labels的形式

例:優化

y = np.array([[1,0,0],[0,1,0],[0,0,1],[1,0,0],[0,1,0]])# 每一行只有一個1
logits =np.array([[12,3,2],[3,10,1],[1,2,5],[4,6.5,1.2],[3,6,1]])

4. weighted_cross_entropy_with_logits

tf.nn.weighted_cross_entropy_with_logits(labels,logits, pos_weight, name=None) 

計算具備權重的sigmoid交叉熵sigmoid_cross_entropy_with_logits()spa

相關文章
相關標籤/搜索