RuntimeError with copy_ () и expand () - неподдерживаемая операция: более одного элемента записанного в тензор ссылается на одну ячейку памяти - PullRequest
0 голосов
/ 25 января 2020

Я переношу репозиторий из Pytorch Nightly 1.0.0 в 1.3.1. Удаление лишних деталей приводит к следующей последовательности операций:

mu = torch.tensor(0.005)
bar = torch.eye(5, 5)
foo = torch.eye(5).expand(5, 5, 5)

# update
bar.copy_(mu * bar)  # ok!
foo.copy_(mu * foo)  # error

bar.copy_(mu * bar) работает, в то время как при попытке foo.copy_() результата выдается следующая ошибка:

RuntimeError: неподдерживаемая операция: более одного элемента записанного в тензор ссылается на одну ячейку памяти. Пожалуйста, клонируйте () тензор перед выполнением операции.

1 Ответ

2 голосов
/ 25 января 2020

Это потому, что expand() только создает новый взгляд на существующий тензор, поэтому он не выделяет всю память, необходимую для получения всех элементов из операции mu * foo, которая имеет больше элементов, чем исходный тензор foo. Вы можете исправить это, используя expand().clone() или repeat(), что даст вам полный тензор.

foo = torch.eye(5).expand(5, 5, 5).clone()  # clone gives the full tensor
foo.copy_(mu * foo)  # ok!

albanD предполагает, что выполнение expand().clone() все еще может быть быстрее, чем repeat().

См. здесь и здесь для получения более подробной информации о expand() и repeat().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...