TF-1

https://www.zhihu.com/question/54513728

name_scope, variable_scope等如何理解

交叉熵

tensorflow-損失函數詳解

交叉熵刻畫的是兩個概率分佈之間的距離,是分類問題中使用比較廣泛的損失函數之一。給定兩個概率分佈p和q,通過交叉熵計算的兩個概率分佈之間的距離爲:

H(X=x) = -\sum_{x}p(x)logq(x)

我們通過softmax迴歸將神經網絡前向傳播得到的結果變成交叉熵要求的概率分佈得分。
T

Tensorflow中定義的交叉熵函數如下:

def softmax_cross_entropy_with_logits(_sentinel=None,  # pylint: disable=invalid-name
                                      labels=None, logits=None,
                                      dim=-1, name=None):
    """Computes softmax cross entropy between `logits` and `labels`."""
  • logits: 神經網絡的最後一層輸出,如果有batch的話,它的大小爲[batch_size, num_classes], 單樣本的話大小就是num_classes
  • labels: 樣本的實際標籤,大小與logits相同。且必須採用labels=y_,logits=y的形式將參數傳入。

具體的執行流程大概分爲兩步,第一步首先是對網絡最後一層的輸出做一個softmax,這一步通常是求取輸出屬於某一類的概率,對於單樣本而言,就是輸出一個num_classes大小的向量[Y1,Y2,Y3,....],其中Y1,Y2,Y3Y1,Y2,Y3分別表示屬於該類別的概率, softmax的公式爲:


 

第二步是對softmax輸出的向量[Y1,Y2,Y3,...]和樣本的時機標籤做一個交叉熵,公式如下:

其中y′i指代實際標籤向量中的第i個值,yi就是softmax的輸出向量[Y1,Y2,Y3,...]中的第i個元素的值。
顯而易見。預測yi越準確,結果的值就越小(前面有負號),最後求一個平均,就得到我們想要的loss了

這裏需要注意的是,這個函數返回值不是一個數,而是一個向量,如果要求交叉熵,我們要在做一步tf.resuce_sum操作,就是對向量裏面的所有元素求和, 最後就能得到Hy′(y),如果要求loss,則需要做一步tf.reduce_mean操作,對向量求均值.

warning:

  • Tenosrflow中集成的交叉熵操作是施加在未經過Softmax處理的logits上, 這個操作的輸入logits是未經縮放的, 該操作內部會對logits使用Softmax操作。
  • 參數labels,ligits必須有相同的shape,如:[batch_size, num_classes]和相同的類型, 如:[(float16, float32, float64)中的一種]。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章