Pytorch: как (эффективно) применить функцию без «тусклого» аргумента к каждой строке 2D-тензора?Python

Программы на Python
Ответить
Anonymous
 Pytorch: как (эффективно) применить функцию без «тусклого» аргумента к каждой строке 2D-тензора?

Сообщение Anonymous »

Коротко говоря, у меня есть двумерная матрица из единиц и нулей, и мне нужно получить для каждой строки индексы элементов, равных единице. «Стандартным» способом сделать это было бы torch.nonzero, но эта функция хорошо известна тем, что 1) является настоящим узким местом, поскольку ей заранее неизвестен размер конечного вектора, и 2) ее нельзя применить к каждую строку 2D-тензора за один раз, поскольку в разных строках может быть разное количество единиц.
Недавно был введен at::nonzero_static, который решает первую проблему, присваивая функции ожидаемый максимум количество ненулевых элементов (что подходит для моего приложения). Однако он не имеет «тусклого» аргумента, а это означает, что его нельзя применить к каждой строке/столбцу индивидуально, что, на мой взгляд, не имеет смысла, поскольку установка размера вывода гарантирует, что каждая строка будет содержать одинаковое количество элементов. , что делает вывод тензорным.
Использование цикла for, очевидно, решило бы мою проблему, но это означало бы вызов функции несколько раз, что неэффективно для графического процессора. Кто-нибудь знает способ эффективно применить nonzero_static к каждой строке и вернуть тензор, где каждая строка является результатом ее применения к каждому срезу тензора? Насколько я понимаю, vmap может быть решением, но я не уверен, оптимизирован ли он для графического процессора.

Подробнее здесь: https://stackoverflow.com/questions/793 ... nt-to-each
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»