TF Metri c ChosenActionHistogram вылетает с ошибкой - PullRequest
2 голосов
/ 07 мая 2020

При использовании TF tf_agents.metrics.tf_metrics.ChosenActionHistogram с драйвером TF Dynami c step и моей собственной средой я обнаружил следующую ошибку:

ValueError: Shapes must be equal rank, but are 1 and 0 for '{{node ResourceScatterUpdate}} = ResourceScatterUpdate[Tindices=DT_INT32, dtype=DT_INT32](ResourceScatterUpdate/resource, FloorMod, value)' with input shapes: [], [], [1]

Я прикрепленных наблюдателей к драйверу шага, например:

self.average_episode_length_metric = tf_metrics.AverageEpisodeLengthMetric()
self.average_return_metric = tf_metrics.AverageReturnMetric()

self.selected_action_histogram_metric = tf_metrics.ChosenActionHistogram()
self.observers = [self.average_episode_length_metric,
                  self.average_return_metric,
                  self.selected_action_histogram_metric
                  ]
self.eval_step_driver = dynamic_step_driver.DynamicStepDriver(
            self.eval_env,
            self.agent.policy,
            num_steps=self.num_eval_steps,
            observers=self.observers
            )

, а затем запустите драйвер шага следующим образом:

self.eval_step_driver.run()

Еще немного трассировки ошибки выглядит как следует:

File "./bot/DQN.py", line 109, in record_policy_metrics
    self.eval_step_driver.run()
    tf_agents-0.4.0-py3.8.egg/tf_agents/metrics/tf_metrics.py:50 extend  *
        self.add(v)

Я понимаю предпосылку проблемы, что тензорные формы не совпадают, но я не могу понять, почему это может происходить. Удаление ChosenActionHistorgram из наблюдателей устраняет ошибку, и другие показатели работают правильно. Что здесь может происходить? Могут ли тензоры траекторий иметь какое-то значение?

1 Ответ

1 голос
/ 14 июня 2020

Для всех, кто сталкивается с этой проблемой, я решил ее для своего случая. Я ошибочно определил действие spe c как (1,), одномерный вектор, вместо (), скалярного значения. Похоже, это сработало для всех других метри c, за исключением tf_metrics.ChosenActionHistogram().

Обеспечение соответствия моего действия spe c с () вместо (1,) решило проблему.

...