2

我正在使用来自 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 成员变量中(根据 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 架构的误解。那么,任何人都可以帮助我吗?

谢谢你,祝你有美好的一天!

4

1 回答 1

1

TF 优化器对象可以通过agent.get_policy()._optimizer.

您之前看到“无属性 _optimizer”的原因_policy_graph是策略类,而不是对象实例,它存在于local_evaluator.policy_map或 viaagent.get_policy()中。

于 2019-02-12T21:31:15.117 回答