Функция PyTorch torch.tensor
Справочное руководство PyTorch torch
torch.tensorЭто основная функция в PyTorch для создания тензоров. Она создаёт новый тензор путём копирования данных и не сохраняет историю автоматического градиента исходных данных.
Это один из наиболее часто используемых способов создания тензоров PyTorch, подходящий для большинства сценариев.
Определение функции
torch.tensor(data, dtype=None, device=None, requires_grad=False, pin_memory=False)
Parameters:
data(любой тип): данные тензора, которые могут быть списком Python, кортежем, массивом NumPy и т. д.dtype(torch.dtype, необязательно): задаёт тип данных тензора, напримерtorch.float32、torch.int64и т. д.device(torch.device, необязательно): задаёт устройство, на котором хранится тензор, напримерtorch.device('cpu')илиtorch.device('cuda')。requires_grad(bool, необязательно): нужно ли вычислять градиент; по умолчаниюFalse。pin_memory(bool, необязательно): использовать ли закреплённую память; по умолчаниюFalse。
Возвращаемое значение:
torch.TensorВозвращает тензор PyTorch.
Примеры использования
Ниже приведены несколько примеров использованияtorch.tensorфункцию.
Пример 1: Создание тензора из списка
Пример
# Создать одномерный тензор из списка Python
data = [1, 2, 3, 4, 5]
x = torch.tensor(data)
print(x)
print(x.dtype)
Вывод:
tensor([1, 2, 3, 4, 5]) torch.int64
В этом примере мы создали одномерный тензор из списка Python. PyTorch автоматически выводит тип данных какint64。
Пример 2: Указание типа данных
Пример
# Создать тензор типа float32
x = torch.tensor([1.0, 2.0, 3.0], dtype=torch.float32)
print(x)
print(x.dtype)
Вывод:
tensor([1., 2., 3.]) torch.float32
В этом примере мы явно указали тип данных тензора какfloat32。
Пример 3: Создание тензора, требующего градиентов
Пример
# Создать тензор, требующий вычисления градиента
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
print(x.requires_grad)
Вывод:
True
В этом примере мы создали тензор, требующий вычисления градиентов, что очень полезно при обучении нейронных сетей.
Пример 4: Создание тензора из двумерного списка
Пример
# Создание двумерного тензора (матрицы) из двумерного списка
data = [[1, 2, 3], [4, 5, 6]]
x = torch.tensor(data)
print(x)
print(x.shape)
Вывод:
tensor([[1, 2, 3],
[4, 5, 6]])
torch.Size([2, 3])
В этом примере мы создали двумерный тензор размером 2x3 из двумерного списка.
Пример 5: Создание тензора на устройстве CUDA
Пример
# Проверить, доступна ли CUDA
if torch.cuda.is_available():
# Создание тензора на устройстве CUDA
x = torch.tensor([1, 2, 3], device='cuda')
print(x.device)
else:
print("CUDA is not available")
Вывод:
cuda:0
В этом примере мы проверяем, доступна ли CUDA, а затем создаём тензор на GPU.
Разница между torch.tensor и torch.as_tensor
torch.tensorиtorch.as_tensorОба используются для создания тензоров, но у них есть важные различия:
torch.tensorВсегда копирует данные; созданный тензор не разделяет память с исходными данными.torch.as_tensorПо возможности разделяет данные, не копирует память и копирует только при необходимости.
Если вам нужно сохранить историю autograd или избежать ненужного копирования данных, вы можете использоватьtorch.as_tensor。
Примечания
torch.tensorОн копирует данные, поэтому изменения в возвращённом тензоре не повлияют на исходные данные.- Если вам нужно создать новый тензор с той же формой и устройством, как у другого тензора, вы можете использовать
torch.zeros_like()илиtorch.ones_like()。 - При создании тензора, если вы не указываете
dtype, PyTorch автоматически определит тип данных.
Другие расширения