Коротко говоря, у меня есть двумерная матрица из единиц и нулей, и мне нужно получить для каждой строки индексы элементов, равных единице. «Стандартным» способом сделать это было бы torch.nonzero, но эта функция хорошо известна тем, что 1) является настоящим узким местом, поскольку ей заранее неизвестен размер конечного вектора, и 2) ее нельзя применить к каждую строку 2D-тензора за один раз, поскольку в разных строках может быть разное количество единиц.
Недавно был введен at::nonzero_static, который решает первую проблему, присваивая функции ожидаемый максимум количество ненулевых элементов (что подходит для моего приложения). Однако он не имеет «тусклого» аргумента, а это означает, что его нельзя применить к каждой строке/столбцу индивидуально, что, на мой взгляд, не имеет смысла, поскольку установка размера вывода гарантирует, что каждая строка будет содержать одинаковое количество элементов. , что делает вывод тензорным.
Использование цикла for, очевидно, решило бы мою проблему, но это означало бы вызов функции несколько раз, что неэффективно для графического процессора. Кто-нибудь знает способ эффективно применить nonzero_static к каждой строке и вернуть тензор, где каждая строка является результатом ее применения к каждому срезу тензора? Насколько я понимаю, vmap может быть решением, но я не уверен, оптимизирован ли он для графического процессора.
Подробнее здесь: https://stackoverflow.com/questions/793 ... nt-to-each
Pytorch: как (эффективно) применить функцию без «тусклого» аргумента к каждой строке 2D-тензора? ⇐ Python
Программы на Python
1736897568
Anonymous
Коротко говоря, у меня есть двумерная матрица из единиц и нулей, и мне нужно получить для каждой строки индексы элементов, равных единице. «Стандартным» способом сделать это было бы torch.nonzero, но эта функция хорошо известна тем, что 1) является настоящим узким местом, поскольку ей заранее неизвестен размер конечного вектора, и 2) ее нельзя применить к каждую строку 2D-тензора за один раз, поскольку в разных строках может быть разное количество единиц.
Недавно был введен at::nonzero_static, который решает первую проблему, присваивая функции ожидаемый максимум количество ненулевых элементов (что подходит для моего приложения). Однако он не имеет «тусклого» аргумента, а это означает, что его нельзя применить к каждой строке/столбцу индивидуально, что, на мой взгляд, не имеет смысла, поскольку установка размера вывода гарантирует, что каждая строка будет содержать одинаковое количество элементов. , что делает вывод тензорным.
Использование цикла for, очевидно, решило бы мою проблему, но это означало бы вызов функции несколько раз, что неэффективно для графического процессора. Кто-нибудь знает способ эффективно применить nonzero_static к каждой строке и вернуть тензор, где каждая строка является результатом ее применения к каждому срезу тензора? Насколько я понимаю, vmap может быть решением, но я не уверен, оптимизирован ли он для графического процессора.
Подробнее здесь: [url]https://stackoverflow.com/questions/79356354/pytorch-how-to-efficiently-apply-a-function-without-a-dim-argument-to-each[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия