RLLib - Tensorflow - InvalidArgumentError: получено значение метки N, которое находится за пределами допустимого диапазона [0, N)
Я использую PPOTrainer RLLib с настраиваемой средой, я выполняю trainer.train()
два раза первый завершается успешно, но когда я выполняю его во второй раз, он вылетает с ошибкой:
lib / python3.7 / site-packages / tensorflow_core / python / client / session.py", строка 1384, в _do_call (pid=15248) тип повышения (e) (node_def, op, message) (pid=15248)
tensorflow.python.framework.errors_impl.InvalidArgumentError:
Получено значение метки 5, которое находится за пределами допустимого диапазона [0, 5). > Значения на этикетке: 5 5
(pid =15248) [[узел default_policy/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits (определен в /tensorflow_core/python/framework/ops.py:1751) ]]
Вот мой код:
main.py
ModelCatalog.register_custom_preprocessor("tree_obs_prep", TreeObsPreprocessor)
ray.init()
trainer = PPOTrainer(env=MyEnv, config={
"train_batch_size": 4000,
"model": {
"custom_preprocessor": "tree_obs_prep"
}
})
for i in range(2):
print(trainer.train())
MyEnv.py
class MyEnv(rllib.env.MultiAgentEnv):
def __init__(self, env_config):
self.n_agents = 2
self.env = *CREATES ENV*
self.action_space = gym.spaces.Discrete(5)
self.observation_space = np.zeros((1, 12))
def reset(self):
self.agents_done = []
obs = self.env.reset()
return obs[0]
def step(self, action_dict):
obs, rewards, dones, infos = self.env.step(action_dict)
d = dict()
r = dict()
o = dict()
i = dict()
for i_agent in range(len(self.env.agents)):
if i_agent not in self.agents_done:
o[i_agent] = obs[i_agent]
r[i_agent] = rewards[i_agent]
d[i_agent] = dones[i_agent]
i[i_agent] = infos[i)agent]
d['__all__'] = dones['__all__']
for agent, done in dones.items():
if done and agent != '__all__':
self.agents_done.append(agent)
return o, r, d, i
Я понятия не имею, в чем проблема, есть предложения? Что означает эта ошибка?
1 ответ
Этот комментарий мне очень помог:
FWIW, я думаю, что такие проблемы могут возникнуть, если в выводе политики появятся NaN. Когда это произойдет, вы можете выйти за пределы допустимого диапазона.
Обычно это происходит из-за того, что наблюдение или вознаграждение каким-то образом становится NaN, хотя это также может быть расхождение в политике.
В моем случае мне пришлось изменить свои наблюдения, потому что агент не смог изучить политику, и в какой-то момент обучения (на случайном временном шаге) возвращенное действие было NaN
.