У меня есть модель в Керасе, для которой я хочу вывести результаты модели и градиенты входных данных w.r.t. total_loss
.
Существуют два ответа, которые обсуждают получение градиентов, которые я понимаю.
Получение градиента выходных данных модели с весами .rt с использованием Keras
Как получить градиенты в кератах?
Однако оба из этих ответов дают решение, которое требует дублирования вычислений прямого / обратного прохода для вывода градиентов в отдельном вызове sess.run
.
Сделать это в собственном тензорном потоке легко, градиенты - это просто тензор, который вы выводите из модели. Однако в Keras потери не определяются при генерации выходных тензоров модели, а определяются в compile(...)
, поэтому вы не можете создавать градиенты как обычный вывод модели.
Должен быть способ добавить операцию (градиенты) к вычислению графа, выполняемому во время этапов обучения в Keras, чтобы я мог получить к ним доступ в обратном вызове или в качестве вывода модели.
Если кто-то не знает лучшего способа, единственное, о чем я могу думать, - это вывод необучаемой переменной из модели и добавление операции присваивания в compile(...)
, которая присваивает градиенты необучаемой переменной. Но это довольно забавно.