Nn criterions don’t compute the gradient w.r.t. targets error"питорч"
№ 1. Причины и решения
возьми этоpytorch-ddpg|githubПри переходе на блокнот jupyter для запуска возникает ошибкаNn criterions don’t compute the gradient w.r.t. targets error. Примечание. Функция критерия оценки, которую я использую,nn.MSELoss(evalute, target). Таким образом, приведенное сообщение об ошибке: градиент целевого значения (ожидаемое значение, также известное как цель, метка), не рассчитывается в этой функции критерия. Это показывает, что атрибут требует_Grad = True для Tensor Tensor Tensor в текущей программе (вы можете распечатать ее для проверки).
问题解决方法: измените цель Target на false, т. е. градиент не требуется. Вы не можете напрямую remove_grad = false здесь. Правильный подход такойcriterions(evalute, target)позвонить доtarget.detach()илиtarget.detach_()функция. В этой программе этой ошибки не будет.
Объяснение: В программе, с которой я столкнулся, целевое значение вычисляется сетью вперед для обновления параметров (например, обновление значения Q в Q-обучении), а не обычная заданная метка (например, Метка значения для контролируемого обучения). Целью в это время является переменная тензора, а атрибут required_grad=True, то есть все переменные, выводимые расчетным графом, требуют градиентов. Мы используем функцию detach_() или detach(), чтобы отделить цель от всего вычислительного графа. Чтобы атрибут цели был восстановлен до require_grad=False.
Во-вторых, ниже приведен код, в котором я обнаружил ошибку, и исправление, на которое вы можете ссылаться.
- должностьpytorch-ddpg|github, найдите файл в красной рамке на рисунке и щелкните для входа на страницу файла.
- Продолжайте поиск, как показано на рисунке, код в зеленой рамке на рисунке должен быть изменен на код, выделенный зеленым шрифтом. Запуск программы больше не имеет этой ошибки.
Примечание. Вы также можете комментировать
#critic updateДобавьте предыдущую строкуtarget_q_value.detach_()Чтобы достичь цели отделения цели от графа расчета, он также может решить проблему.
3. Завершите процесс отладки
- 1 операцияpytorch-ddpg|githubЭта ошибка возникает.
- 2 Две основные поисковые системы, все виды поиска. Я обнаружил, что есть много людей, которые столкнулись с этой проблемой. Я попробую один за другим в соответствии с ответами под вопросом. Например, я буду
requires_grad=FalseПодождите, я обнаружил, что я не могу так усердствовать, и появится еще одна ошибка (решение на этот раз действительно было дано в ошибке, но я не смотрел внимательно, и я нашел его, когда я сортировал это сейчас такjump to 3):
- 3 Поскольку этот пример появился при обновлении функции Q-значения, похожей на Q-обучение, я вдруг вспомнил, что классическая процедура pytorchDQN | подпрограммы pytorch. Я запустил программу без ошибок, поэтому поставилpytorch-ddpg|githubИзмените соответствующую частьDQN | подпрограммы pytorchТакой же. Однако я обнаружил, что проблема все еще существует. Я внимательно проверил и обнаружил, что небольшая разница все же есть. На рисунке ниже красный прямоугольник — это цель, соответствующая DQN, и обнаружено, что выполняется функция, которая не знает, что делать. Поэтому я снова поискал и нашел блог, в котором была представлена эта функция.pytorch: отсоединение переменных и блог detach_CSDN, а потом понять причину проблемы (объяснение в первой части уже дало причину).
##Четыре, резюме Хоть шаг и прошел, но концовка хорошая - проблема решена.pytorch-ddpg|githubЯвляется ли использование DDPG для тренировки перевернутого маятника, непрерывного действия, непрерывного времени. После устранения ошибки программа запускается нормально, и выводится результат:
- Только начал тренироваться
- 1000 шагов обучения
Наконец, надеюсь, у вас не будет возможности найти решение этой ошибки.
Дополнение: в этой статье встречаются два ключевых атрибута pytorch:Variable.requries_grad, Variable.volatile, и две функцииVariable.detach()иVariable.detach_()