tf.nn学习之l2_normalize(tf.math.l2_normalize)

现在都统一称呼为tf.math.l2_normalize

tf1.15版本

别名:

tf.compat.v1.linalg.l2_normalize

tf.compat.v1.math.l2_normalize

tf.compat.v1.nn.l2_normalize

tf.linalg.l2_normalize

tf.nn.l2_normalize

作用

对于axis = 0的1-D张量,计算如下:

output = x / sqrt(max(sum(x**2), epsilon))

对于具有更多维度的x,沿着维度axis独立地规范化每个1-D切片.

使用

tf.math.l2_normalize(
    x,
    axis=None,
    epsilon=1e-12,
    name=None,
    dim=None
)

参数

x: 输入的向量
axis: 要标准化的尺寸,使用L2范数沿维度axis正则化
epsilon: 规范化的下限值.如果norm <sqrt(epsilon),将使用sqrt(epsilon)作为除数.
name:操作名称
dim:轴的别名(后被弃用)

返回值

和X相同形状的向量

tf2.2

别名

tf.linalg.l2_normalize

tf.nn.l2_normalize

使用

tf.math.l2_normalize(
    x, axis=None, epsilon=1e-12, name=None
)

唯一的区别就是dim弃用掉了

例子

import tensorflow as tf


input = tf.constant([[1,2,3],[4,5,6],[7,8,9]])

output1 = tf.nn.l2_normalize(input, axis = 0)
output2 = tf.nn.l2_normalize(input, axis = 1)
output3 = tf.nn.l2_normalize(input)

with tf.Session() as sess:
print sess.run(output1)
print sess.run(output2)
print sess.run(output3)

output1

[[0.12309149 0.20739034 0.26726127]
 [0.49236596 0.51847583 0.53452253]
 [0.86164045 0.82956135 0.80178374]]

output2

[[0.26726124 0.5345225 0.8017837 ]
[0.45584232 0.5698029 0.6837635 ]
[0.5025707 0.5743665 0.64616233]]

output3

[[0.05923489 0.11846977 0.17770466]
 [0.23693955 0.29617444 0.35540932]
 [0.4146442  0.4738791  0.53311396]]

计算

tf.nn.l2_normalize(input, axis = 0)
按行进行l2范化
n o r m ( 1 = 1 2 + 2 2 + 3 2 norm(1)= \sqrt{1^2+2^2+3^2} \quad
n o r m ( 2 = 4 2 + 5 2 + 6 2 norm(2)= \sqrt{4^2+5^2+6^2} \quad
n o r m ( 3 = 7 2 + 8 2 + 9 2 norm(3)= \sqrt{7^2+8^2+9^2} \quad
结果就是每一行的数字都除以对应的norm得到的向量就是结果

tf.nn.l2_normalize(input, axis = 1)
按列进行l2范化,逸雅阁的,不赘述
tf.nn.l2_normalize(input)
按所有的进行l2范化,同理。

注意

这里的norm对应前面提到的参数epsilon,如果norm <sqrt(epsilon),将使用sqrt(epsilon)作为除数.即可以通过调节epsilon来设置下限。

猜你喜欢

转载自blog.csdn.net/fuzizhu1/article/details/106566176