1. 程式人生 > >tensorflow API:tf.norm

tensorflow API:tf.norm

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. tensoraxis大小是2,只支援'euclidean', 'fro', 1, 2, np.inf
  • axis: 如果 axisNone (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