повторение pytorch 3-го измерения

#numpy #pytorch #tensor

#numpy #pytorch #тензор

Вопрос:

Я следую этому примеру в документе

 In [42]: x = torch.tensor([1,2,3])


In [45]: x.repeat(4,2)
Out[45]: tensor([[1, 2, 3, 1, 2, 3],
        [1, 2, 3, 1, 2, 3],
        [1, 2, 3, 1, 2, 3],
        [1, 2, 3, 1, 2, 3]])

In [46]: x.repeat(4,2).shape 
Out[46]: torch.Size([4, 6])
  

Пока все хорошо.

Но почему повторение только 1 раза в 3-м измерении увеличивает 3-й dim до 3 (не 1)?

 [On the doc]

>>> x.repeat(4, 2, 1).size()
torch.Size([4, 2, 3])
  

Двойная проверка.

 In [43]: x.repeat(4,2,1)
Out[43]:
tensor([[[1, 2, 3],
         [1, 2, 3]],

        [[1, 2, 3],
         [1, 2, 3]],

        [[1, 2, 3],
         [1, 2, 3]],

        [[1, 2, 3],
         [1, 2, 3]]])
  

Почему он ведет себя таким образом?

Комментарии:

1. обновил мой ответ более подробной информацией

Ответ №1:

Это увеличивает размер ([3]) тензора только один раз вдоль первого dim. (4,2,1) — это количество раз, которое вы хотите повторить тензор (3,). Итак, конечный тензор равен (4,2,3), потому что вы повторяете (3,) один раз по последней оси, дважды по предпоследней и 4 раза по первой оси.

 x = torch.tensor([1, 2, 3])
x.shape
  
 torch.Size([3])
  

Затем,

 xx = x.repeat(4,2,1)
xx.shape
  
 torch.Size([4, 2, 3])
  

Комментарии:

1. вы хотите сказать, что при повторении всегда начинайте дублирование с большего размера dim?

2. Я говорю, что первое измерение является самой внешней скобкой, в то время как последнее измерение будет содержать исходный массив. Отображение одномерного тензора — [1,2,3] . Превращение этого массива в 2-D просто добавляет скобки снаружи — [[1,2,3]] и его форма (1,3) . Затем делаем это 3D-массивом — [[[1,2,3]]] и его форма (1,1,3) . Это должно дать вам представление о том, почему повторение его вышеуказанным способом приводит к (4,2,3) .

3. не уверен, почему этот ответ отклонен. это правильно отвечает на вопрос, заданный OP. с подробным объяснением как в ответе, так и в вопросе.