访问优化器内部状态

时间:2019-02-12 14:48:07

标签: tensorflow optimization ray adam

我正在使用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成员-variable中(根据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架构的误解。那么,有人可以帮我吗?

谢谢您,祝您愉快!

1 个答案:

答案 0 :(得分:1)

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

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