#python #machine-learning #deep-learning #parallel-processing #pytorch
#python #машинное обучение #глубокое обучение #параллельная обработка #pytorch
Вопрос:
Я хотел бы найти способ применить функцию, которая вычисляет попарные расстояния, назовем ее dists(A, B), по строкам для каждого входного элемента в пакете, что означает:
(100, 16, 3) — ввод, 100 — это размер пакета, то есть 100 экземпляров, 16 — это, скажем, размер изображения, и 3 фильтра (запрашивается Conv2D)
(5, 3) — тензор, для которого я хочу вычислить расстояние по строкам (предположим, что оно равно A в расстояниях (A, B) и является фиксированным)
Теперь для каждого экземпляра я должен возвращать матрицу формы (5, 16). Естественно, я мог бы использовать for, чтобы охватить пакет и получить окончательный (100,5,16) результат. Тем не менее, я хотел бы знать, есть ли более простой способ применить мою функцию последовательно, параллельно, используя графический процессор.
Большое вам спасибо за ваше время.
Ответ №1:
Предположим, мы используем расстояние L1:
import torch
# data and target
a = torch.randn(100, 16, 3)
b = torch.randn(5, 3)
# Reshape the tensors
a = a.unsqueeze(1)
b = b.unsqueeze(0).unsqueeze(2)
print(a.shape, b.shape)
# Compute distance
dist = (a-b).abs().sum(3)
print(dist.shape)
Комментарии:
1. Ну, мы не должны отвечать спасибо в комментариях, но, эй, большое спасибо. Теперь я могу значительно ускорить весь процесс.