tensorflow API:tf.norm
阿新 • • 發佈:2018-12-08
tf.norm
tf.norm(
tensor,
ord='euclidean',
axis=None,
keepdims=None,
name=None,
keep_dims=None
)
作用:計算向量,矩陣的範數。
引數:
- tensor: 要計算的張量。
- ord:指定做什麼樣的範數計算。支援
'fro', 'euclidean', 1, 2, np.inf
還有任意正值來計算p範數
。預設是euclidean
範數,即對向量而言是2-範數
,對矩陣而言就是計算Frobenius
範數。有如下限制:1.Frobenius
fro
對向量是未定義的;2.tensor
的axis
大小是2,只支援'euclidean', 'fro', 1, 2, np.inf
。 - axis: 如果
axis
是None (the default)
,輸入被視為一個向量,整個tensor
計算出一個範數值。如果axis
是一個整數,輸入被視為batch
的一堆向量;如果axis
是二元組(2-turple)
整數,則輸入視為batch
的一堆矩陣。支援負的索引,比如輸入的tensor
在執行時,可以視為一個矩陣或者一個batch
的一堆矩陣,傳遞axis=[-2,-1]
確保計算的是矩陣範數。 - keepdims:
- name:
例子:
看出來設定axis=1
的時候計算每一行向量的2範數;
當我傳入的tensor
是包含三個矩陣的batch
的時候,傳遞axis=[-2,-1]
計算各矩陣的F範數;
當我傳入的是作為一個單獨矩陣的tensor
的時候,計算的是這一個矩陣的F範數
。
i = tf.cast(np.random.random_integers(0,5,(4,3)),tf.float32) matrix = tf.constant([[[2], [4], [6]], [[8], [10], [12]], [[14], [16], [18]]],tf.float32) norm = tf.norm(i,axis=1) matrix_norm = tf.norm(matrix,ord='fro',axis=[-2,-1]) matrix_first_element_norm = tf.norm(matrix[0],ord='fro',axis=[-2,-1]) #等價於計算矩陣F範數 same_matrix_ele_norm = tf.sqrt(tf.reduce_sum(tf.square(matrix[0]))) with tf.Session() as sess: print(sess.run(i)) print(sess.run(norm)) print("matrix_norm:",sess.run(matrix_norm)) print("matrix_first_element_norm:",sess.run(matrix_first_element_norm)) print("same_matrix_ele_norm:",sess.run(same_matrix_norm))
輸出:
[[4. 0. 1.]
[1. 1. 5.]
[4. 4. 2.]
[4. 4. 0.]]
[4.1231055 5.196152 5.9999995 5.6568537]
matrix_norm: [ 7.483315 17.549929 27.856777]
matrix_first_element_norm: 7.483315
same_matrix_ele_norm: 7.483315