tensorflow API:tf.norm

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/NockinOnHeavensDoor/article/details/83246413

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

猜你喜欢

转载自blog.csdn.net/NockinOnHeavensDoor/article/details/83246413
今日推荐