#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. с подробным объяснением как в ответе, так и в вопросе.