пересечение элемента pytorch - PullRequest
1 голос
/ 08 апреля 2020

Когда я вычисляю Коэффициент попадания, мне нужно вычислить количество элементов прогнозирующего тензора в целевом тензоре, я хочу вычислить количество элементов в их пересечении.

Например: [количество классов: 20, количество образцов: 2]

target: tensor([[14, 13, 8, 11, 18, 12, 5, 1, 0, 10], [ 8, 10, 2, 10, 7, 17, 6, 12, 13, 14]])

pred_idx: (HR@5): tensor([[14, 11, 8, 19, 4], [ 6, 9, 8, 13, 18]])

сейчас, когда я это сделаю >>> (pred_idx & target).sum((1,2))

RuntimeError: The size of tensor a (5) must match the size of tensor b (10) at non-singleton dimension 1.

Но дело в том, что прогноз и цель имеют разный размер, как я могу вычислить количество элементов в * 1016? * что тоже в мишени?

1 Ответ

1 голос
/ 08 апреля 2020

Возможно, вы могли бы преобразовать в numpy и затем использовать его операции над множествами.

import torch
import numpy as np

target = torch.tensor([[14, 13, 8, 11, 18, 12, 5, 1, 0, 10], [ 8, 10, 2, 10, 7, 17, 6, 12, 13, 14]])
pred_idx = torch.tensor([[14, 11, 8, 19, 4], [ 6, 9, 8, 13, 18]])

Найти элементы из p@5 в цели:

[np.intersect1d(t,p) for t,p in zip(target.cpu().numpy(),pred_idx.cpu().numpy())]

Найти количество элементов в p@5 также в цели:

[len(np.intersect1d(t,p)) for t,p in zip(target.cpu().numpy(),pred_idx.cpu().numpy())]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...