Промежуточный градиент при оптимизации
Во время обучения модели GP с помощью GPFlow я заинтересован в наблюдении за градиентами, заданными ScipyOptimizer. Я хотел бы связать эти градиенты с другими моделями GP. У кого-нибудь есть какие-либо рекомендации относительно того, как вывести эти тензоры до того, как они будут переданы оптимизатору?
1 ответ
Я не думаю, что есть способ достичь этого без взлома исходного кода gpflow. Самым простым решением, вероятно, является редактирование loss_grad_func_wrapper
функция определена внутри ScipyOptimizerInterface._minimize
в gpflow/training/external_optimizer.py - он получает значения всех обучаемых параметров x
, потери и градиенты - хотя обратите внимание, что это упакованные параметры (т.е. один массив всех параметров) - вам придется вручную разбить их на значения / градиенты на тензор... или взломать eval_func(x)
в ExternalOptimizerInterface
, который выполняет распаковку, обновляет feed_dict, запускает расчет градиента и упаковывает результаты... Надеюсь, это даст вам хотя бы отправную точку!