Функция torch.reshape в PyTorch


Pytorch torch 参考手册Справочное руководство Pytorch torch

torch.reshapeЭто функция в PyTorch, используемая для изменения формы тензора. Она возвращает новый тензор с тем же числом элементов, что и исходный тензор, но с другой формой.

Это очень распространённая операция в глубоком обучении, используемая для приведения формы данных в соответствие с требованиями к входу разных слоёв.

Определение функции

torch.reshape(input, shape)

Parameters:

  • input(Tensor): Входной тензор.
  • shape(tuple или int): Целевая форма. Число элементов в форме должно быть равно числу элементов во входном тензоре. Можно использовать-1чтобы PyTorch автоматически вывел размерность.

Возвращаемое значение:

  • torch.Tensor: Возвращает представление тензора с изменённой формой.

Примеры использования

Пример 1: Преобразование одномерного тензора в двумерный

Пример

import torch

# Создать одномерный тензор
x = torch.arange(12)

print("Исходная форма:", x.shape)
print(x)

# Изменение на двумерный тензор 3x4
y = torch.reshape(x, (3, 4))

print("Новая форма:", y.shape)
print(y)

Вывод:

原始形状: torch.Size([12])
tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
新形状: torch.Size([3, 4])
tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]])

Пример 2: Использование -1 для автоматического вывода размерностей

Пример

import torch

# Создать 3D-тензор
x = torch.randn(2, 3, 4)

print("Исходная форма:", x.shape)

# Используйте -1, чтобы автоматически вывести последнюю размерность
y = torch.reshape(x, (2, -1))

print("Новая форма:", y.shape)

Вывод:

原始形状: torch.Size([2, 3, 4])
新形状: torch.Size([2, 12])

Пример 3: Выравнивание до 2D

Пример

import torch

# Создание 4D-тензора (типичные пакетные данные изображений)
x = torch.randn(32, 3, 224, 224)  # Размер пакета 32, каналов 3, высота и ширина 224

print("Исходная форма:", x.shape)

# Выравнивание до (размер пакета, остальное)
y = torch.reshape(x, (32, -1))

print("Форма после выравнивания:", y.shape)

Вывод:

原始形状: torch.Size([32, 3, 224, 224])
展平后形状: torch.Size([32, 150528])

Это часто используется перед подачей данных изображения в полносвязные слои.

Пример 4: Разница между reshape и view

Пример

import torch

# Создание непрерывного тензора
x = torch.arange(12).reshape(3, 4)

# reshape может вернуть представление или копию
y = torch.reshape(x, (4, 3))

print("y — это представление x:", y.is_contiguous() or y.data_ptr() == x.data_ptr())

torch.reshapeможет обрабатывать не непрерывные тензоры, тогда какtensor.view()требует, чтобы тензор был непрерывным.


Примечания

  • torch.reshapeВозвращённый тензор может быть представлением исходных данных или копией, в зависимости от расположения в памяти.
  • Если нужно гарантировать возвращённое представление, можно использоватьtensor.view(), но убедитесь, что тензор непрерывный.
  • Общее количество элементов в shape должно совпадать с количеством элементов в исходном тензоре.

Pytorch torch 参考手册Справочное руководство Pytorch torch

Другие расширения