Pytorch пакетное последовательное применение функции

#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. Ну, мы не должны отвечать спасибо в комментариях, но, эй, большое спасибо. Теперь я могу значительно ускорить весь процесс.