Gym环境下评估RL模型时提取观测值的代码行报错求助
Gym环境下评估RL模型时提取观测值的代码行报错求助
各位大佬好,最近在做强化学习模型的评估,用的是Gym环境,跑了个循环收集观测数据和累计奖励,但其中有一行提取观测值的代码一直报错,折腾半天没搞定,来求助下!
先贴我的代码片段:
total_reward = 0 obs_test = env_test.reset() all_mirs = [] for step in range(1728): # 按5分钟一个间隔,跑满24小时的步数 action, _ = model.predict(obs_test) obs_test, reward, done, info = env_test.step(action) all_mirs += list(obs_test[0][20:30]) # <-- 就是这行触发了报错 total_reward += reward
我的需求其实很简单:想把每一步环境返回的观测值里,索引20到30的那部分数据提取出来,追加到all_mirs列表里。但运行时要么报索引越界,要么提示我没法对obs_test做二维切片,感觉是我对obs_test的结构理解错了。
我自己试着排查了下:
- 打印过
obs_test的类型和形状,发现有时候它不是我预期的二维数组,偶尔会是一维的? - 试过先把
obs_test转成numpy数组再切片,但还是会有维度不匹配的问题
想请教大家几个问题:
- 会不会是
env.step()返回的观测值维度在不同步骤里会发生变化? - 有没有什么稳妥的方式先确认
obs_test的结构,再安全提取目标数据? - 有没有替代的写法,能避免这种因结构不明确导致的切片报错?
内容来源于stack exchange
相关产品推荐
相关产品推荐

