Autograd Pytorch завершается с ошибкой «RuntimeError: дифференцированный ввод недоступен» после сбора входных данных - PullRequest
0 голосов
/ 16 мая 2018

Pytorch версия 0.3.1

РЕДАКТИРОВАТЬ: я переписываю этот вопрос для упрощения, так как я сузил ошибку.

У меня есть несколько переменных:

x = ag.Variable(torch.ones(1, 1), requires_grad = True)
y = ag.Variable(torch.ones(1, 1), requires_grad = True)
z = ag.Variable(torch.ones(1, 1), requires_grad = True)

Затем я создаю переменную, представляющую их конкатенацию:

w = torch.cat([x, y, z])
f = x + y + z

Тогда я пытаюсь взять производные:

ag.grad(f, x, retain_graph=True, create_graph=True)

Это нормально и возвращает 1, как и ожидалось. То же самое для y и z.

Тем не менее,

ag.grad(f, w, retain_graph=True, create_graph=True)

Возвращает ошибку: RuntimeError: дифференцированный ввод недоступен

Конечно, это имеет смысл - w явно не используется в объявлении f. Однако мне бы хотелось, чтобы одна строка кода генерировала что-то вроде [1; 1; 1] в качестве вывода.

Допустим, я хотел удобно объединить свои переменные вместе, а затем взять градиент всего Шебанга, а не обрабатывать переменные независимо (что может сделать бухгалтерию кошмаром). Есть ли способ получить желаемый результат?

1 Ответ

0 голосов
/ 16 мая 2018

Работает ли что-то подобное или вы хотите оставить f = x + y + z?

w = torch.cat([x, y, z])
f = w[0] + w[1] + w[2]
print (ag.grad(f, w, retain_graph=True, create_graph=True))

# output (tensor([[ 1.],[ 1.],[ 1.]]),)
...