访问优化器内部状态

Access optimizers internal state

我正在使用来自 Ray/RLLib 的 DQN 代理。为了更深入地了解训练过程是如何进行的,我想访问 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

但是,我无法访问 Adam 优化器。由于它是使用代理策略图的 'optimizer' 函数构造的,然后存储在 _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'

Docs 建议使用 agent.local_evaluator,但是我在那里找不到 Adams 状态。

可能这只是我对 Rays 架构的误解。那么,有人可以帮我吗?

谢谢你,祝你有愉快的一天!

可通过 agent.get_policy()._optimizer.

访问 TF 优化器对象

您之前看到 "no attribute _optimizer" 的原因是因为 _policy_graph 是策略 class,而不是对象实例,它存在于 local_evaluator.policy_map 中或通过 agent.get_policy().