Tensorflow中常用函數以及常見名詞定義講解

Tensorflow詳解

Tensorflow官方文檔:https://www.w3cschool.cn/tensorflow_python/

目錄

Tensorflow詳解

一.Tensorflow中常用函數講解

1. tf.nn.softmax_cross_entropy_with_logits() 交叉熵

2. tf.arg_max()函數

3. tf.equal()函數

4. tf.cast()函數

5. tf.reduce_*類降維函數講解

(1)tf.reduce_mean()函數

(2)tf.reduce_sum()函數

(3)tf.reduce_min()函數

(4)tf.reduce_max()函數

(5)tf.reduce_all()函數

(6)tf.reduce_any()函數

(7)tf.reduce_logsumexp()函數

(8)tf.reduce_prod()函數

二.Tensorflow中常見名詞定義

1. tensorflow中batch的含義


一.Tensorflow中常用函數講解

1. tf.nn.softmax_cross_entropy_with_logits() 交叉熵

在計算loss的時候,最常見的一句話就是tf.nn.softmax_cross_entropy_with_logits,

首先明確一點,loss是代價值,也就是我們要最小化的值

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

參數:
除去name參數用以指定該操作的name,與方法有關的一共兩個參數:

  • logits:就是神經網絡最後一層的輸出,如果有batch的話,它的大小就是[batch_size,num_classes],單樣本的話,大小就是num_classes
  • labels:實際的標籤,大小同上
  • name: 用以指定該操作的name;

具體的執行流程大概分爲兩步:

第一步是先對網絡最後一層的輸出做一個softmax,這一步通常是求取輸出屬於某一類的概率,對於單樣本而言,輸出就是一個num_classes大小的向量([Y1,Y2,Y3...]其中Y1,Y2,Y3...分別代表了是屬於該類的概率)

softmax的公式是:

至於爲什麼是用的這個公式?這裏不介紹了,涉及到比較多的理論證明

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

其中指代實際的標籤中第i個的值(用mnist數據舉例,如果是3,那麼標籤是[0,0,0,1,0,0,0,0,0,0],除了第4個值爲1,其他全爲0)

就是softmax的輸出向量[Y1,Y2,Y3...]中,第i個元素的值

顯而易見,預測越準確,結果的值越小(別忘了前面還有負號),最後求一個平均,得到我們想要的loss

注意!!!這個函數的返回值並不是一個數,而是一個向量,如果要求交叉熵,我們要再做一步tf.reduce_sum操作,就是對向量裏面所有元素求和,最後纔得到,如果求loss,則要做一步tf.reduce_mean操作,對向量求均值!
--------------------- 
原文:https://blog.csdn.net/mao_xiao_feng/article/details/53382790 

2. tf.arg_max()函數

定義爲: def arg_max(input, dimension, name=None)       

作用是取行或者列的最大值的位置(即返回最大的那個數值所在的下標)。

  • input:類型爲 float32, float64, int64, int32, uint8, uint16, int16, int8, complex64, complex128, qint8, quint8, qint32, half的tensor
  • dimension:必須爲int32, int64. int32,取值爲0或1, 當dimension=1時返回每列最大值的下標,當dimension=0時返回每行最大值的下標。
  • name:名字
  • returns:返回一個tensor

3. tf.equal()函數

tf.equal(A,B)是對比這兩個矩陣或者向量的相等的元素,如果是相等的那就返回True,反正返回False,

return: 返回的值的矩陣維度和A是一樣的。

例:

A = [[1,3,4,5,6]]  
B = [[1,3,4,3,2]]
with tf.Session() as sess:  
    print(sess.run(tf.equal(A, B)))
    
結果:[[ True  True  True False False]]

4. tf.cast()函數

tf.cast(x, dtype)將x的數據格式轉化成dtype

例: 

a = tf.Variable([1,0,0,1,1])
b = tf.cast(a,dtype=tf.bool)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
print(sess.run(b))
 
[ True False False  True  True]

5. tf.reduce_*類降維函數講解

(1)tf.reduce_mean()函數

tf.reduce_mean 函數用於計算張量tensor沿着指定的數軸(tensor的某一維度)上的的平均值,主要用作降維或者計算tensor(圖像)的平均值。

定義:reduce_mean(input_tensor, axis=None, keep_dims=False, name=None)

參數:

  • input_tensor: 輸入的待降維的tensor;
  • axis: 指定的軸,如果不指定,則計算所有元素的均值;
  • keep_dims:是否降維度,設置爲True,輸出的結果保持輸入tensor的形狀,設置爲False,輸出結果會降低維度;
  • name: 操作的名稱;
import tensorflow as tf
 
x = [[1,2,3],
      [1,2,3]]
 
xx = tf.cast(x,tf.float32)
 
mean_all = tf.reduce_mean(xx, keep_dims=False)
mean_0 = tf.reduce_mean(xx, axis=0, keep_dims=False)
mean_1 = tf.reduce_mean(xx, axis=1, keep_dims=False)
 
 
with tf.Session() as sess:
    m_a,m_0,m_1 = sess.run([mean_all, mean_0, mean_1])
 
print m_a    # output: 2.0
print m_0    # output: [ 1.  2.  3.]
print m_1    #output:  [ 2.  2.]


#若設置keep_dims爲True,則與xx的shape相同
print m_a    # output: [[ 2.]]
print m_0    # output: [[ 1.  2.  3.]]
print m_1    #output:  [[ 2.], [ 2.]]

--------------------- 
原文:https://blog.csdn.net/dcrmg/article/details/79797826 

(2)tf.reduce_sum()函數

定義:tf.reduce_sum(input_tensor,axis = None,keep_dims = False,name = None ,reduction_indices = None)

參數:

  • input_tensor:要減少的張量。應該有數字類型。
  • axis:要減小的尺寸。如果爲None(默認),則縮小所有尺寸。必須在範圍[-rank(input_tensor), rank(input_tensor))內。
  • keep_dims:如果爲true,則保留長度爲1的縮小尺寸。
  • name:操作的名稱(可選)。
  • reduction_indices:axis的廢棄的名稱。

返回:該函數返回減少的張量,相當於np.sum

功能:此函數計算一個張量的各個維度上元素的總和。

說明:函數中的input_tensor是按照axis中已經給定的維度來減少的;除非 keep_dims 是true,否則張量的秩將在axis的每個條目中減少1;如果keep_dims爲true,則減小的維度將保留爲長度1。 如果axis沒有條目,則縮小所有維度,並返回具有單個元素的張量。
例:

x = tf.constant([[1, 1, 1], [1, 1, 1]])
tf.reduce_sum(x)  # 6
tf.reduce_sum(x, 0)  # [2, 2, 2]
tf.reduce_sum(x, 1)  # [3, 3]
tf.reduce_sum(x, 1, keep_dims=True)  # [[3], [3]]
tf.reduce_sum(x, [0, 1])  # 6

(3)tf.reduce_min()函數

定義:reduce_min(input_tensor, axis=None, keep_dims=False, name=None, reduction_indices=None)

參數:

  • input_tensor:減少的張量。應該有數字類型。
  • axis:要減小的尺寸。如果爲None(默認),則縮小所有維度。必須在[-rank(input_tensor), rank(input_tensor))範圍內。
  • keep_dims:如果爲true,則保留長度爲1的縮小維度。
  • name:操作的名稱(可選)。
  • reduction_indices:axis的廢棄的名稱。

返回:該函數返回減少的張量,相當於np.min

功能:tf.reduce_min函數用來計算一個張量的各個維度上元素的最小值。 

說明:同樣按照axis給定的維度減少input_tensor。除非 keep_dims 是true,否則張量的秩將在axis的每個條目中減少1。如果keep_dims爲true,則減小的維度將保留爲長度1。 如果axis沒有條目,則縮小所有維度,並返回具有單個元素的張量。

(4)tf.reduce_max()函數

定義:reduce_max(input_tensor, axis=None, keep_dims=False, name=None, reduction_indices=None)

參數:

  • input_tensor:要減少的張量。應該有數字類型。
  • axis:要減小的尺寸。如果爲 None(默認),則減少所有維度。必須在[-rank(input_tensor), rank(input_tensor))範圍內。
  • keep_dims:如果爲true,則保留長度爲1的減少維度。
  • name:操作的名稱(可選)。
  • reduction_indices:axis的廢棄的名稱。
     

返回:該函數返回減少的張量,相當於np.max。

功能:計算一個張量的各個維度上元素的最大值。 

說明:按照axis給定的維度減少input_tensor。除非 keep_dims 是true,否則張量的秩將在axis的每個條目中減少1。如果keep_dims爲true,則減小的維度將保留爲長度1。如果axis沒有條目,則減少所有維度,並返回具有單個元素的張量。

(5)tf.reduce_all()函數

定義:reduce_all(input_tensor, axis=None, keep_dims=False, name=None, reduction_indices=None)

參數:

  • input_tensor:要減少的張量。應該有數字類型。
  • axis:要減小的尺寸。如果爲None(默認),則減少所有維度。必須在[-rank(input_tensor), rank(input_tensor))範圍內。
  • keep_dims:如果爲true,則保留長度爲1的縮小尺寸。
  • name:操作的名稱(可選)。
  • reduction_indices:axis的不支持使用的名稱。
     

返回:該函數返回減少的張量。相當於np.all

功能:計算一個張量在維度上元素的“邏輯和”。

說明:給按照軸線給定的維度減少input_tensor 。除非keep_dims爲 true,否則張量的秩將在軸的每個條目中減少1。如果keep_dims爲 true,則減小的維度將保留爲長度1。如果軸沒有條目,則會減少所有維度,並返回具有單個元素的張量。

例:

x = tf.constant([[True,  True], [False, False]])
tf.reduce_all(x)  # False
tf.reduce_all(x, 0)  # [False, False]
tf.reduce_all(x, 1)  # [True, False]

(6)tf.reduce_any()函數

定義:reduce_any(input_tensor, axis=None, keep_dims=False, name=None, reduction_indices=None)

參數:

  • input_tensor:要減少的布爾張量。
  • axis:要減小的尺寸。如果爲None(默認),則減少所有維度。必須在範圍[-rank(input_tensor), rank(input_tensor))內。
  • keep_dims:如果爲true,則保留長度爲1的縮小維度。
  • name:操作的名稱(可選)。
  • reduction_indices:axis的已經棄用的名稱。

返回:減少張量,相當於np.any

功能:在張量的維度上計算元素的 "邏輯或"。 

說明:按照axis給定的維度減少input_tensor。除非 keep_dims 是 true,否則張量的秩將在axis的每個條目中減少1。如果keep_dims爲true,則縮小的維度將保留爲1。如果axis沒有條目,則會減少所有維度,並返回具有單個元素的張量。
例:

x = tf.constant([[True,  True], [False, False]])
tf.reduce_any(x)  # True
tf.reduce_any(x, 0)  # [True, True]
tf.reduce_any(x, 1)  # [True, False]

(7)tf.reduce_logsumexp()函數

定義:reduce_logsumexp(input_tensor, axis=None, keep_dims=False, name=None, reduction_indices=None)

參數:

  • input_tensor:張量減少。應該有數字類型。
  • axis:要減小的維度。如果爲None(默認),則減少所有維度。必須在[-rank(input_tensor), rank(input_tensor))範圍內。
  • keep_dims:如果爲true,則保留長度爲1的減少尺寸。
  • name:操作的名稱(可選)。
  • reduction_indices:axis的棄用名稱。

返回:減少的張量。

功能:計算log(sum(exp(張量的各維數的元素)))。 

說明:按照給定的axis上的維度減少input_tensor。除非keep_dims是true,否則張量的秩在axis上的每一項都減少1。如果keep_dims爲 true,則減少的尺寸將保留爲1。如果axis沒有條目,則縮小所有維度,並返回具有單個元素的張量。這個函數在數值上比 log(sum(exp(input)))更穩定。它避免了大量輸入的 exp 引起的溢出和小輸入日誌帶來的下溢。
例:

x = tf.constant([[0., 0., 0.], [0., 0., 0.]])
tf.reduce_logsumexp(x)  # log(6)
tf.reduce_logsumexp(x, 0)  # [log(2), log(2), log(2)]
tf.reduce_logsumexp(x, 1)  # [log(3), log(3)]
tf.reduce_logsumexp(x, 1, keep_dims=True)  # [[log(3)], [log(3)]]
tf.reduce_logsumexp(x, [0, 1])  # log(6)

(8)tf.reduce_prod()函數

定義:reduce_prod(input_tensor, axis=None, keep_dims=False, name=None, reduction_indices=None)

參數:

  • input_tensor:要減少的張量。應該有數字類型。
  • axis:要減小的尺寸。如果爲None(默認),則將縮小所有尺寸。必須在[-rank(input_tensor), rank(input_tensor))範圍內。
  • keep_dims:如果爲true,則保留長度爲1的縮小維度。
  • name:操作的名稱(可選)。
  • reduction_indices:axis的廢棄的名稱。

返回:結果返回減少的張量,相當於np.prod

功能:此函數計算一個張量的各個維度上元素的乘積。 

說明:函數中的input_tensor是按照axis中已經給定的維度來減少的;除非 keep_dims 是true,否則張量的秩將在axis的每個條目中減少1;如果keep_dims爲true,則減小的維度將保留爲長度1。 如果axis沒有條目,則縮小所有維度,並返回具有單個元素的張量。

--------------------- 

原文:https://blog.csdn.net/u013093426/article/details/81430374 

二.Tensorflow中常見名詞定義

1. tensorflow中batch的含義

batch: batch是批。深度學習每一次參數的更新所需要損失函數並不是由一個{data:label}獲得的,而是由一組數據加權得到的,這一組數據的數量就是[batch size]。

batch分析詳見:https://www.zhihu.com/question/32673260

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