RLLib - Tensorflow - InvalidArgumentError:收到的标签值 N 超出 [0, N) 的有效范围

Posted

技术标签:

【中文标题】RLLib - Tensorflow - InvalidArgumentError:收到的标签值 N 超出 [0, N) 的有效范围【英文标题】:RLLib - Tensorflow - InvalidArgumentError: Received a label value of N which is outside the valid range of [0, N) 【发布时间】:2020-04-03 23:26:37 【问题描述】:

我在自定义环境中使用 RLLib 的 PPOTrainer,我执行了两次trainer.train(),第一次成功完成,但是当我第二次执行时它崩溃并出现错误:

lib/python3.7/site-packages/tensorflow_core/python/client/session.py", 第 1384 行,在 _do_call (pid=15248) raise type(e)(node_def, op, 消息) (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】:

This 评论对我很有帮助:

FWIW,我认为如果 NaN 出现在策略中,可能会发生此类问题 输出。发生这种情况时,您可能会出现超出范围的错误。

通常是由于观察或奖励以某种方式变为 NaN, 尽管也可能是政策分歧。

就我而言,我不得不修改我的观察结果,因为代理无法学习策略,并且在训练的某个时间点(随机时间步长)返回的操作是 NaN

【讨论】:

谢谢!我在某处出现了除以 0 的错误,这显然导致了该错误。

以上是关于RLLib - Tensorflow - InvalidArgumentError:收到的标签值 N 超出 [0, N) 的有效范围的主要内容,如果未能解决你的问题,请参考以下文章

强化学习rllib简明教程 ray

强化学习rllib简明教程 ray

rllib 使用自定义注册环境

RLlib 训练一次迭代中的时间步数

如何评估在 rllib (Ray) 中自定义环境中训练的演员?

更改 Ray RLlib Training 的 Logdir 而不是 ~/ray_results