Внутреннее состояние оптимизаторов доступа
Я использую агента DQN от Ray/RLLib. Чтобы получить более полное представление о том, как проходит процесс обучения, я хотел бы получить доступ к внутреннему состоянию Adam-Optimizer, например, чтобы визуализировать, как скользящее среднее значение градиента меняется со временем. См. Минимальный фрагмент кода ниже для иллюстрации.
agent = DQNAgent(config=agent_config, env=self.env)
episode_results = []
for i in range(int(budget)):
# add epoch results to result list
episode_results.append(agent.train())
# add internal values of the optimizer
episode_results[-1]['g_avg'] = None
episode_results[-1]['g_square_avg'] = None
Однако мне не удается получить доступ к оптимизатору Адама. Поскольку он построен с использованием функции "оптимизатора" графа политики агентов, а затем хранится в переменной-члене _optimizer (согласно конструктору TFPolicy_Graph), мой инстинкт был к нему доступ через
agent._policy_graph._optimizer
, Из графика политики агентов dqn:
@override(TFPolicyGraph)
def optimizer(self):
return tf.train.AdamOptimizer(
learning_rate=self.config["lr"],
epsilon=self.config["adam_epsilon"])
Из конструктора TFPolicyGraph:
self._optimizer = self.optimizer()
Это просто дает мне:
AttributeError: type object 'DQNPolicyGraph' has no attribute '_optimizer'
Документы рекомендуют использовать agent.local_evaluator
Однако я не могу найти там состояние Адамса.
Вероятно, это просто мое недоразумение Rays архитектуры. Итак, кто-нибудь может мне помочь с этим?
Спасибо и хорошего дня!
1 ответ
Объект TF-оптимизатора доступен через agent.get_policy()._optimizer
,
Причина, по которой вы раньше видели "без атрибута _optimizer", заключается в том, что _policy_graph
это класс политики, а не экземпляр объекта, который присутствует в local_evaluator.policy_map
или через agent.get_policy()
,