Как Pytorch вычисляет матрицу попарного расстояния?Почему «я» расстояние не ноль? - PullRequest
0 голосов
/ 04 декабря 2018

Если это наивный вопрос, пожалуйста, прости меня, мой тестовый код выглядит так:

import torch
from torch.nn.modules.distance import PairwiseDistance

list_1 = [[1., 1.,],[1., 1.]]
list_2 = [[1., 1.,],[2., 1.]]

mtrxA=torch.tensor(list_1)
mtrxB=torch.tensor(list_2)

print "A-B distance     :",PairwiseDistance(2).forward(mtrxA, mtrxB)
print "A 'self' distance:",PairwiseDistance(2).forward(mtrxA, mtrxA)
print "B 'self' distance:",PairwiseDistance(2).forward(mtrxB, mtrxB)

Результат:

A-B distance     : tensor([1.4142e-06, 1.0000e+00])
A 'self' distance: tensor([1.4142e-06, 1.4142e-06])
B 'self' distance: tensor([1.4142e-06, 1.4142e-06])

Вопросы:

  1. Как Pytorch рассчитывает попарно расстояние?Это чтобы вычислить расстояние между векторами строк?

  2. Почему не 'self' расстояние 0?


Обновление

После изменения list_1 и list_2 на это:

list_1 = [[1., 1.,1.,],[1., 1.,1.,]]
list_2 = [[1., 1.,1.,],[2., 1.,1.,]]

Результат становится:

A-B distance     : tensor([1.7321e-06, 1.0000e+00])
A 'self' distance: tensor([1.7321e-06, 1.7321e-06])
B 'self' distance: tensor([1.7321e-06, 1.7321e-06])

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

в соответствии с https://github.com/pytorch/pytorch/blob/master/torch/nn/functional.py

Computes the p-norm distance between every pair of row vectors in the input.
0 голосов
/ 04 декабря 2018

Глядя на документацию nn.PairWiseDistance, pytorch ожидает два двумерных тензора N векторов в D измерениях и вычисляет расстояния между парами N.

Почему «собственное» расстояние не равно нулю - возможно, из-за точности с плавающей запятой и из-за eps = 1e-6.

...