在TensorFlow中计算张量中所有向量之间的成对欧几里得距离的有效方法

xro7

feature_map一个具有形状的张量:b,h,w,c = feature_map.shape

为了计算通道(c)轴上所有向量之间的成对欧几里得距离,我使用以下代码:

feature_map = tf.reshape(feature_map,(b,-1,c))
norms = []
for i in range(h*w):
    norm = tf.norm(feature_map-feature_map[:,i:i+1,:],ord=2,axis=-1)
    norms.append(sorted_tensor)
norms = tf.stack(norms,axis=1)

此过程非常慢。为了避免这种情况,for-loop我尝试使用tf.tile复制张量,然后应用该norm函数,但是由于生成的张量非常大,导致内存错误。

有没有更有效的方法来做到这一点?

xro7

我从这里开始使用欧几里得距离矩阵技巧

numpy适应是以下情况:

feature_map = tf.reshape(feature_map,(b,-1,c))         
G = np.einsum('bik, bjk->bij', feature_map, feature_map)
D = G.diagonal(axis1=1,axis2=2).reshape(b,-1,1)+ np.transpose(G.diagonal(axis1=1,axis2=2).reshape(b,-1,1),axes=(0,2,1)) - 2*G
norms = np.sqrt(D)

以及相应的tensorflow改编:

feature_map = tf.reshape(feature_map,(b,-1,c))     
G = tf.einsum('bik, bjk->bij', feature_map, feature_map)
D = tf.reshape(tf.linalg.diag_part(G),(b,-1,1))+ tf.transpose(tf.reshape(tf.linalg.diag_part(G),(b,-1,1)),perm=(0,2,1)) - 2*G
norms = tf.sqrt(D)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

计算数据框所有行之间的成对欧几里得距离

在python中计算距值的距离的有效方法

计算N个样本和聚类质心之间的平方欧几里得距离的最有效方法是什么?

如何有效地计算不同长度(na内部)序列之间的成对距离?

混合数值和分类数据的观测值之间成对距离计算的有效实现

计算张量的有效方法

Pyspark计算RDD中所有向量之间的自定义距离

如何在没有for循环的情况下有效计算欧几里得距离矩阵?

有效访问成对距离

计算python中成对向量概率分布的有效方法

在Tensorflow中有效计算成对排名损失函数

有效地计算两个数据集之间的成对的Haversine距离-NumPy / Python

如何有效地计算多个时间序列的欧几里得距离矩阵

使用Numpy有效地计算欧几里得距离矩阵

计算一维 numpy 数组之间成对差异的有效方法

在大熊猫数据集的所有行中计算NaN列的有效方法?

在每个时间步骤中计算所有个体之间距离的更快方法

计算dask数据框中所有行的差的有效方法

在Python中有效检查大量对象的欧几里得距离

计算包含xy坐标列表的数据框中所有点之间的距离的方法

如何计算向量之间的欧几里得距离?

在TensorFlow中计算Kronecker产品的最有效方法是什么?

计算向量中所有条目组合之间的差异

计算熊猫框架柱组合之间距离的有效方法

计算2个整数坐标点之间的距离的最有效方法?

计算成对差异的有效实现

计算1D数组与2D数组中所有行之间的余弦相似度的有效方法

在DataFrame中计算增量的有效方法?

在python中计算信号功率的有效方法