Я новичок в pytorch. Я пытаюсь реализовать пользовательскую функцию потерь, вычисляя абсолютное и относительное расстояние и объединяя их.
def distance(p1, p2,labels):
"""
Returns the distance between the point sets p1 and p2
p1 = m by d matrix containing a set of points
p2 = m by d matrix containing a different set of points
returns: an m-length vector containing the distance from each point in
p1 to the corresponding point in p2
"""
if not np.all(p1.shape == p2.shape):
raise ValueError("p1 and p2 must be the same shape.")
d = p1.shape[1]
features = np.zeros(dtype=np.float32, shape=(p1.shape[0], d * 2))
features[:, :d] = np.abs(p1 - p2)
features[:, d:] = (p1 + p2) / 2
return features
Проблема появляется, когда я пытаюсь запустить ее, и я получаю следующую ошибку:
Файл "... строка 34, на расстоянии
features[:, :d] = np.abs(p1 - p2)
Файл "... \ Anaconda2 \ envs \ensorflow_gpuenv \ lib \ site-packages \ensorflow \ python \ util \ dispatch.py", строка 180, в целевом объекте возврата оболочки (* args, ** kwargs)
Файл "... \ lib \ site-packages \ tenorflow \ python \ ops \ math_ops.py", строка 266, в abs x = ops.convert_to_tensor (x, name = "x")
File " ... \ lib \ site-packages \ tenorflow \ python \ framework \ ops.py ", строка 1087, в convert_to_tensor, возвращать convert_to_tensor_v2 (значение, dtype, предпочитаемый_dtype, имя)
RuntimeError: Can't call numpy() on Variable that requires grad. Use var.detach().numpy() instead.