Метод squeeze_ тензора
Метод squeeze_ изменяет тензор на месте, удаляя все размерности, длина которых равна единице. Он является версией метода squeeze с операцией на месте (in-place). Метод может принимать необязательный параметр dim, чтобы удалить размерность только по указанной оси. В отличие от squeeze, этот метод изменяет сам тензор, не создавая копии, что экономит память.
Синтаксис
tensor.squeeze_([dim])
Пример
Давайте создадим тензор с размерностью 1 и удалим её с помощью метода squeeze_:
import torch
t = torch.tensor([[[1, 2, 3, 4, 5]]])
print("Исходная форма:", t.shape)
t.squeeze_()
print("Форма после squeeze_:", t.shape)
print("Содержимое:", t)
Результат выполнения кода:
Исходная форма: torch.Size([1, 1, 5])
Форма после squeeze_: torch.Size([5])
Содержимое: tensor([1, 2, 3, 4, 5])
Пример
Удалим только конкретную размерность с помощью аргумента dim:
import torch
t = torch.tensor([[[1, 2, 3], [4, 5, 6]]])
print("Исходная форма:", t.shape)
t.squeeze_(dim=0)
print("Форма после squeeze_(dim=0):", t.shape)
print("Содержимое:", t)
Результат выполнения кода:
Исходная форма: torch.Size([1, 2, 3])
Форма после squeeze_(dim=0): torch.Size([2, 3])
Содержимое: tensor([[1, 2, 3], [4, 5, 6]])
Пример
Попробуем удалить размерность, которая не равна единице - тензор не изменится:
import torch
t = torch.tensor([[1, 2, 3, 4, 5]])
print("Исходная форма:", t.shape)
t.squeeze_(dim=1)
print("Форма после squeeze_(dim=1):", t.shape)
print("Содержимое:", t)
Результат выполнения кода:
Исходная форма: torch.Size([1, 5])
Форма после squeeze_(dim=1): torch.Size([1, 5])
Содержимое: tensor([[1, 2, 3, 4, 5]])
Пример
Метод squeeze_ работает только с размерностями, равными 1. В отличие от unsqueeze_, он не может добавлять новые оси:
import torch
t = torch.tensor([[[1, 2, 3]]])
print("Начальная форма:", t.shape)
t.squeeze_()
print("Форма после squeeze_:", t.shape)
t.unsqueeze_(dim=0)
print("Форма после unsqueeze_:", t.shape)
Результат выполнения кода:
Начальная форма: torch.Size([1, 1, 3])
Форма после squeeze_: torch.Size([3])
Форма после unsqueeze_: torch.Size([1, 3])
Смотрите также
-
метод
unsqueeze,
который добавляет новую размерность -
метод
unsqueeze_,
версия добавления размерности на месте -
метод
view,
который изменяет форму тензора без изменения данных -
метод
reshape,
который изменяет форму тензора, создавая копию при необходимости