Каков векторизованный способ выполнения этой операции в pytorch вместо двух циклов FOR - PullRequest
1 голос
/ 07 мая 2020

Image describing the pack and unpacking operation

Привет, у меня есть тензор «A» в Pytorch dimesnsions Batch x Channel x Height x Width. Я хочу преобразовать его в «B» так, чтобы размеры H и W увеличивались на «r», а каналы уменьшались в «r ^ 2». Для 'r' = 2 рисунок показан на прилагаемом рисунке. На рисунке, если «B» имел 4 канала, то первые 4 канала, причем 4-й канал имел фиолетовый цвет границы, тогда первые четыре канала в «A» будут пикселями пикового / телесного цвета с красными, зелеными, синими и фиолетовыми цветами границы и оставшимися. каналы настроены соответствующим образом.

Я знаю, что «pack» и «unpack» могут быть выполнены с двумя петлями for. Но на это нужно больше времени. В PyTorch должен быть векторизованный способ переключения между «A» и «B» с помощью только команд изменения формы и изменения. Может ли кто-нибудь помочь мне в этом?

В этом примере размер пакета установлен на 1. Но если размер пакета больше, я бы хотел, чтобы операции, показанные на рисунке, выполнялись индивидуально для каждой записи пакета.

Может ли кто-нибудь помочь мне с общим кодом c для переключения между A и B векторизованным способом в PyTorch. Лучше, если это также работает, когда размер пакета больше 1.

Обратите внимание, что две операции не могут быть выполнены с уже реализованным nn.PixelShuffle

Большое спасибо.

1 Ответ

1 голос
/ 07 мая 2020

Хотя это можно сделать с помощью осторожной перестановки и изменения формы, pytorch уже реализовал это с помощью nn.PixelShuffle.

...