我正在使用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架构的误解。那么,有人可以帮我吗?
谢谢您,祝您愉快!
答案 0 :(得分:1)
可以通过agent.get_policy()._optimizer
访问TF优化器对象。
您之前看到“没有属性_optimizer”的原因是因为_policy_graph
是策略类,而不是对象实例,它存在于local_evaluator.policy_map
或通过agent.get_policy()
中。