РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
47 of 769 menu

Метод copy_

Метод copy_ класса Tensor выполняет копирование данных из другого тензора в текущий тензор. В отличие от операции присваивания, которая просто создаёт ссылку на новый объект, метод copy_ изменяет содержимое существующего тензора, перезаписывая его значения. Метод работает на месте (in-place), то есть изменяет сам объект, а не создаёт новый. При этом копируемый тензор должен иметь совместимую форму, либо можно использовать параметр broadcast для включения механизма широковещания.

Метод принимает один обязательный параметр - тензор-источник src. Также есть необязательный параметр non_blocking, который указывает, следует ли выполнять копирование асинхронно для тензоров на GPU. Важно отметить, что после выполнения метода исходный тензор и целевой тензор могут находиться на разных устройствах, но тогда необходимо, чтобы копирование между устройствами было возможным.

Синтаксис

t.copy_(src, non_blocking=False)

Пример

Давайте создадим два тензора и скопируем данные из второго в первый:

import torch t = torch.tensor([1, 2, 3, 4, 5]) src = torch.tensor([10, 20, 30, 40, 50]) t.copy_(src) print(t)

Результат выполнения кода:

tensor([10, 20, 30, 40, 50])

Как видите, данные тензора t были полностью перезаписаны значениями из тензора src.

Пример

Метод copy_ позволяет копировать тензоры разных типов данных, автоматически преобразуя их:

import torch t = torch.tensor([1, 2, 3], dtype=torch.float) src = torch.tensor([4, 5, 6], dtype=torch.int) t.copy_(src) print(t) print(t.dtype)

Результат выполнения кода:

tensor([4., 5., 6.]) torch.float32

Тип данных целевого тензора сохранился, а значения из источника были преобразованы в соответствующий тип.

Пример

Важно отметить, что формы тензоров должны быть совместимы. Попытка копирования тензора другой формы приведёт к ошибке:

import torch t = torch.tensor([1, 2, 3]) src = torch.tensor([4, 5, 6, 7]) try: t.copy_(src) except RuntimeError as e: print(e)

Результат выполнения кода:

"The expanded size of the tensor (3) must match the existing size (4) at non-singleton dimension 0. Target sizes: [3]. Tensor sizes: [4]"

В этом случае возникает ошибка, так как размеры тензоров не совпадают.

Пример

Метод copy_ можно использовать для копирования данных между разными устройствами, например, с CPU на GPU:

import torch t = torch.zeros(3, device='cuda') src = torch.tensor([1, 2, 3], device='cpu') t.copy_(src) print(t) print(t.device)

Результат выполнения кода:

tensor([1., 2., 3.], device='cuda:0') cuda:0

Данные были скопированы с CPU на GPU, целевой тензор остался на своём устройстве.

Пример

Метод copy_ возвращает ссылку на изменённый тензор, что позволяет использовать его в цепочках методов:

import torch t = torch.tensor([1, 2, 3]) src = torch.tensor([4, 5, 6]) res = t.copy_(src) print(res) print(res is t)

Результат выполнения кода:

tensor([4, 5, 6]) True

Как видите, метод возвращает сам изменённый тензор, а не его копию.

Смотрите также

  • метод clone,
    который создаёт копию тензора с сохранением градиентов
  • метод detach,
    который создаёт тензор, отключённый от графа вычислений
  • метод to,
    который перемещает тензор на указанное устройство или меняет его тип
  • метод numpy,
    который преобразует тензор в массив NumPy
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить