Вот некоторые объяснения и правильный способ индексации элементов, которые вы ищете:
# input tensor to work with
In [11]: a = torch.arange(4*3*2).reshape(4,3,2)
# check its shape
In [12]: a.shape
Out[12]: torch.Size([4, 3, 2])
# inspect/annotate the tensor
In [13]: a
Out[13]: # ( 4 , 3 , 2 ) <= shape
tensor([[[ 0, 1], | # block-0 | row-0 | col-0 col-1
[ 2, 3], | # block-0 | row-1 | col-0 col-1
[ 4, 5]], | # block-0 | row-2 | col-0 col-1
[[ 6, 7], | # block-1 | row-0 | col-0 col-1
[ 8, 9], | # block-1 | row-1 | col-0 col-1
[10, 11]], | # block-1 | row-2 | col-0 col-1
[[12, 13], | # block-2 | row-0 | col-0 col-1
[14, 15], | # block-2 | row-1 | col-0 col-1
[16, 17]], | # block-2 | row-2 | col-0 col-1
[[18, 19], | # block-3 | row-0 | col-0 col-1
[20, 21], | # block-3 | row-1 | col-0 col-1
[22, 23]]]) | # block-3 | row-2 | col-0 col-1
# slice out what we need; (in all blocks, all rows, column-0)
In [14]: a[:, :, 0]
Out[14]:
tensor([[ 0, 2, 4],
[ 6, 8, 10],
[12, 14, 16],
[18, 20, 22]])
Объяснение / Разъяснение
Тензор имеет форму [4, 3, 2]
, где 4
представляет количество блоков (блок-0, ... блок-3). Далее у нас есть 3
, который представляет количество строк в каждом блоке. И наконец, у нас есть 2
, которые представляют количество столбцов в каждой строке. Мы разрезаем это, используя обозначение нарезки a[:, :, 0]
.
Чтобы получить доступ к блоку , нам понадобится только один индекс (а именно: a [0], ... a [3]). Чтобы получить доступ к определенной строке в конкретном блоке , нам понадобятся два индекса (а именно: [0, 1], ... a [3,2]). Чтобы получить доступ к определенному столбцу определенной строки из определенного блока , нам потребуются три индекса (а именно: [0, 1, 1] и т. Д.) .,)
Я предполагаю, что ваш случай вызвал путаницу из-за использования torch.FloatTensor()
. Проблема с использованием torch.FloatTensor()
заключается в том, что он будет распределять ненужные значения или значения, оставленные предыдущей программой, которая использовала эти блоки памяти. Иногда это может вызывать недоумение, потому что между последующими запусками мы можем получить противоречивые результаты.