Внутреннее состояние оптимизаторов доступа

Я использую агента 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(),

Другие вопросы по тегам