Функция torch.reshape в PyTorch
Справочное руководство 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)
# Создать одномерный тензор
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)
# Создать 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)
# Создание 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())
# Создание непрерывного тензора
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 должно совпадать с количеством элементов в исходном тензоре.
Другие расширения