几种距离度量

简单介绍几种常见的距离度量,以及tensorflow中如何实现


欧式距离

欧氏距离很简单,以向量为例(x1, x2, x3,….,xn),(y1, y2, y3,….,yn),那么其欧氏距离的计算公式如下图所示:

定义

在这里插入图片描述

计算

import tensorflow as tf

x3 = tf.constant([[[[1], [2], [3], [4]],
                   [[5], [6], [7], [8]],
                   [[9], [10], [11], [12]]],

                  [[[1], [2], [3], [4]],
                   [[5], [6], [7], [8]],
                   [[9], [10], [11], [12]]]], tf.float32)

x4 = tf.constant([[[[3], [4], [1], [2]],
                   [[5], [7], [8], [6]],
                   [[9], [12], [11], [10]]],

                  [[[1], [2], [3], [4]],
                   [[5], [6], [7], [8]],
                   [[9], [10], [11], [12]]]], tf.float32)

with tf.Session() as sess:
    dis = sess.run(tf.square(x3-x4))
    dis1 = sess.run(tf.reduce_sum(tf.square(x3-x4), 2))
    euclidean = sess.run(tf.sqrt(tf.reduce_sum(tf.square(x3-x4), 2)))
    print dis, dis1, euclidean

结果

dis:
[[[[ 4.]
   [ 4.]
   [ 4.]
   [ 4.]]

  [[ 0.]
   [ 1.]
   [ 1.]
   [ 4.]]

  [[ 0.]
   [ 4.]
   [ 0.]
   [ 4.]]]


 [[[ 0.]
   [ 0.]
   [ 0.]
   [ 0.]]

  [[ 0.]
   [ 0.]
   [ 0.]
   [ 0.]]

  [[ 0.]
   [ 0.]
   [ 0.]
   [ 0.]]]] 
dis1:
[[[ 16.]
  [  6.]
  [  8.]]

 [[  0.]
  [  0.]
  [  0.]]] 

Euclidean:
[[[ 3.99999976]
  [ 2.44948959]
  [ 2.82842684]]

 [[ 0.        ]
  [ 0.        ]
  [ 0.        ]]]

所以Euclidean距离的计算方法就是:

euclidean = tf.sqrt(tf.reduce_sum(tf.square(x3-x4), 2))

曼哈顿距离

定义

计算

余弦距离

跟Euclidean距离相似,余弦距离也可以用来表征两个向量之间的相似度。

定义

在这里插入图片描述

计算

在Dgcnn中,edge-conv中增加余弦距离:

  # 计算每个点到中心点的向量a、k邻域点到中心点的向量b
  a=point_cloud_central-cloud_center            # B*N*K*num_dims
  b=point_cloud_neighbors-cloud_center          # B*N*K*num_dims

  # 求模
  a_norm=tf.sqrt(tf.reduce_sum(tf.square(a), axis=-1))
  b_norm=tf.sqrt(tf.reduce_sum(tf.square(b), axis=-1))

  # 内积
  a_b = tf.reduce_sum(tf.multiply(a, b), axis=-1)

  # 余弦距离
  cosin = tf.divide(a_b, tf.multiply(a_norm, b_norm))    # B*N*K

  # 对余弦距离扩维
  cosin=tf.expand_dims(cosin,axis=-1)

参考

使用TensorFlow实现余弦距离/欧氏距离(Euclidean distance)以及Attention矩阵的计算

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tech沉思录

点赞加投币,感谢您的资瓷~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值