『TensorFlow』網絡操作API_中_損失函數及分類器


一、誤差值

度量兩個張量或者一個張量和零之間的損失誤差,這個可用於在一個回歸任務或者用於正則的目的(權重衰減)。

l2_loss

tf.nn.l2_loss(t, name=None)

解釋:這個函數的作用是利用 L2 范數來計算張量的誤差值,但是沒有開方並且只取 L2 范數的值的一半,具體如下:

output = sum(t ** 2) / 2

輸入參數:

  • t: 一個Tensor。數據類型必須是一下之一:float32float64int64int32uint8int16int8complex64qint8quint8qint32。雖然一般情況下,數據維度是二維的。但是,數據維度可以取任意維度。
  • name: 為這個操作取個名字。

輸出參數:

一個 Tensor ,數據類型和 t 相同,是一個標量。

使用例子

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np
import tensorflow as tf

input_data = tf.Variable( np.random.rand(2, 3), dtype = tf.float32 )
output = tf.nn.l2_loss(input_data)
with tf.Session() as sess:
    init = tf.initialize_all_variables()
    sess.run(init)
    print sess.run(input_data)
    print sess.run(output)
    print sess.run(tf.shape(output))

二、分類器

sigmoid_cross_entropy_with_logits

tf.nn.sigmoid_cross_entropy_with_logits(logits, targets, name=None)

解釋:這個函數的作用是計算 logits 經 sigmoid 函數激活之后的交叉熵。

對於一個不相互獨立的離散分類任務,這個函數作用是去度量概率誤差。比如,比如,在一張圖片中,同時包含多個分類目標(大象和狗),那么就可以使用這個函數。

為了描述簡潔,我們規定 x = logitsz = targets,那么 Logistic 損失值為:

x - x * z + log( 1 + exp(-x) )

為了確保計算穩定,避免溢出,真實的計算實現如下:

max(x, 0) - x * z + log(1 + exp(-abs(x)) )

輸入參數:

  • logits: 一個Tensor。數據類型是以下之一:float32或者float64
  • targets: 一個Tensor。數據類型和數據維度都和 logits 相同。
  • name: 為這個操作取個名字。

輸出參數:

一個 Tensor ,數據維度和 logits 相同。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np
import tensorflow as tf

input_data = tf.Variable( np.random.rand(1,3), dtype = tf.float32 )
output = tf.nn.sigmoid_cross_entropy_with_logits(input_data, [[1.0,0.0,0.0]])
with tf.Session() as sess:
    init = tf.initialize_all_variables()
    sess.run(init)
    print sess.run(input_data)
    print sess.run(output)
    print sess.run(tf.shape(output))

早期使用,后來多使用softmax。

softmax

tf.nn.softmax(logits, name=None)

解釋:這個函數的作用是計算 softmax 激活函數。

對於每個批 i 和 分類 j,我們可以得到:

softmax[i, j] = exp(logits[i, j]) / sum(exp(logits[i]))

輸入參數:

  • logits: 一個Tensor。數據類型是以下之一:float32或者float64。數據維度是二維 [batch_size, num_classes]
  • name: 為這個操作取個名字。

輸出參數:

一個 Tensor ,數據維度和數據類型都和 logits 相同。

 

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np
import tensorflow as tf

input_data = tf.Variable( [[0.2, 0.1, 0.9]] , dtype = tf.float32 )
output = tf.nn.softmax(input_data)
with tf.Session() as sess:
    init = tf.initialize_all_variables()
    sess.run(init)
    print sess.run(input_data)
    print sess.run(output)
    print sess.run(tf.shape(output))

 log_softmax

tf.nn.log_softmax(logits, name=None)

解釋:這個函數的作用是計算 softmax 激活函數。

對於每個批 i 和 分類 j,我們可以得到:

softmax[i, j] = log(exp(logits[i, j]) / sum(exp(logits[i])))

輸入參數:

  • logits: 一個Tensor。數據類型是以下之一:float32或者float64。數據維度是二維 [batch_size, num_classes]
  • name: 為這個操作取個名字。

輸出參數:

一個 Tensor ,數據維度和數據類型都和 logits 相同。

 softmax_cross_entropy_with_logits

tf.nn.softmax_cross_entropy_with_logits(logits, labels, name=None)

解釋:這個函數的作用是計算 logits 經 softmax 函數激活之后的交叉熵。

對於每個獨立的分類任務,這個函數是去度量概率誤差。比如,在 CIFAR-10 數據集上面,每張圖片只有唯一一個分類標簽:一張圖可能是一只狗或者一輛卡車,但絕對不可能兩者都在一張圖中。(這也是和 tf.nn.sigmoid_cross_entropy_with_logits(logits, targets, name=None)這個API的區別

警告:輸入API的數據 logits 不能進行縮放,因為在這個API的執行中會進行 softmax 計算,如果 logits 進行了縮放,那么會影響計算正確率。不要調用這個API區計算 softmax 的值,因為這個API最終輸出的結果並不是經過 softmax 函數的值。

logitslabels 必須有相同的數據維度 [batch_size, num_classes],和相同的數據類型 float32 或者 float64

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np
import tensorflow as tf

input_data = tf.Variable( [[0.2, 0.1, 0.9]] , dtype = tf.float32 )
output = tf.nn.softmax_cross_entropy_with_logits(input_data, [[1,0,0]])
with tf.Session() as sess:
    init = tf.initialize_all_variables()
    sess.run(init)
    print sess.run(input_data)
    print sess.run(output)
    print sess.run(tf.shape(output))

sparse_softmax_cross_entropy_with_logits

tf.nn.sparse_softmax_cross_entropy_with_logits(logits, labels, name=None)

解釋:這個函數的作用是計算 logits 經 softmax 函數激活之后的交叉熵,同softmax_cross_entropy_with_logits,只是logits的shape是[batch, class], label的shape是[batch],不用人為one_hot編碼。

weighted_cross_entropy_with_logits

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM