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