Внутреннее состояние оптимизаторов доступа - PullRequest
0 голосов
/ 12 февраля 2019

Я использую DQN Agent от 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

Однако мне не удается получить доступ к оптимизатору 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'

Документы рекомендую использовать agent.local_evaluator, однако я не могу найти там состояние Адамса.

Вероятно, это только я неправильно понимаю архитектуру Rays.Итак, кто-нибудь может мне помочь с этим?

Спасибо и хорошего дня!

1 Ответ

0 голосов
/ 13 февраля 2019

Объект TF-оптимизатора доступен через agent.get_policy()._optimizer.

Причина, по которой вы раньше видели «без атрибута _optimizer», заключается в том, что _policy_graph - это класс политики, а не экземпляр объекта, который присутствует вlocal_evaluator.policy_map или через agent.get_policy().

...