当一幅图像用某种特征表示出来,一般要进行L1-normalize或者是L2-normalize。
假设一幅图像表示为Y=[x1 x2 x3 x4 x5],
L1-normalize的结果为:
L2-normalize的结果为:
通过L1或L2标准化的图像特征往往具有良好的效果。
顺便提一下tensorflow中 l2_normalize函数的实现:
tf.nn.l2_normalize(x, dim, epsilon=1e-12, name=None)
解释:这个函数的作用是利用 L2 范数对指定维度 dim 进行标准化。
比如,对于一个一维的张量,指定维度 dim = 0,那么计算结果为:
output = x / sqrt( max( sum( x ** 2 ) , epsilon ) )
假设 x 是多维度的,那么标准化只会独立的对维度 dim 进行,不会影响到别的维度。
import tensorflow as tf
a=tf.constant([[1,1],[2,2],[3,3]],dtype=tf.float32)
with tf.Session() as sess:
print(sess.run(tf.nn.l2_normalize(a, [0])))
sess.close()
输出结果:
[[ 0.26726124 0.26726124]
[ 0.53452247 0.53452247]
[ 0.80178368 0.80178368]]