Pytorch — Просмотр/ выравнивание (4, 10, 3, 368, 368) кому (40, 3, 368, 368)

#python #multidimensional-array #deep-learning #pytorch #tensor

#python #многомерный массив #глубокое обучение #pytorch #тензор

Вопрос:

Как преобразовать тензор формы (4, 10, 3, 368, 368) чтобы (40, 3, 368, 368). Я не могу найти никакой документации по этому вопросу. Я мог бы вручную закодировать его, но я уверен, что есть какой-нибудь более простой способ сгладить первые два индекса.

Ответ №1:

Вы можете использовать следующее, чтобы преобразовать свой 5D тензор в 4D:

 # some sample tensor to work with
In [12]: shape = (4, 10, 3, 368, 368)
In [13]: tensor_5D = torch.randn(shape)

In [14]: tensor_5D.shape
Out[14]: torch.Size([4, 10, 3, 368, 368])
 

Теперь мы изменим форму вышеупомянутого тензора, сгладив первые два измерения, используя view() метод:

 In [22]: tensor_4D = tensor_5D.view(tuple((-1, *shape[2:])))

# desired shape
In [23]: tensor_4D.shape
Out[23]: torch.Size([40, 3, 368, 368])
 

Ответ №2:

В PyTorch есть две функции, которые могут вам помочь.

  1. view(): возвращает новый тензор с теми же данными, что и собственный тензор, но другого размера.
  2. reshape(): возвращает тензор с теми же данными и количеством элементов, что и на входе, но с указанной формой. Когда это возможно, возвращаемый тензор будет представлять собой представление входных данных. В противном случае это будет копия.

Итак, оба из следующих действий должны работать.

 # input_tensor = (4, 10, 3, 368, 368)
output_tensor = input_tensor.view((-1, *input_tensor.shape[2:])) # option1
output_tensor = input_tensor.reshape((-1, *input_tensor.shape[2:])) # option2