как продублировать входной канал в тензоре? - PullRequest
2 голосов
/ 04 февраля 2020

У меня есть тензор с формой torch.Size([39, 1, 20, 256, 256]), как мне дублировать канал, чтобы сделать форму torch.Size([39, 3, 20, 256, 256]).

1 Ответ

3 голосов
/ 04 февраля 2020

Я вполне уверен, что это уже дублирующий вопрос, но я не смог найти подходящий ответ сам, поэтому я иду вперед и отвечаю на него, ссылаясь как на PyTorch документацию , так и Форум PyTorch

По сути, torch.Tensor.expand() - это функция, которую вы ищете, и может использоваться следующим образом:

x = torch.rand([39, 1, 20, 256, 256])
y = x.expand(39, 3, 20, 256, 256)

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

Более одного элемента расширенный тензор может относиться к одной ячейке памяти. В результате операции на месте (особенно те, которые векторизованы) могут привести к некорректному поведению. Если вам нужно записать в тензоры, сначала клонируйте их.

Для вновь выделенной версии памяти см. torch.Tensor.repeat, которая обрисована в общих чертах в this ( немного связаны) ответ . Синтаксис работает в остальном точно так же, как expand().

...