#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 есть две функции, которые могут вам помочь.
- view(): возвращает новый тензор с теми же данными, что и собственный тензор, но другого размера.
- 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