Tensorforce DQN教程报错TypeError: method类型参数不可迭代如何解决
报错原因与修复方案
核心问题
你看到的报错与memory参数无关,是新版本Tensorforce的接口变更导致的:
- 旧版本中
env.states、env.actions是存储规格的静态属性 - 新版本中二者变为可调用方法,需要执行后才能拿到状态、动作的规格字典
你直接把方法对象传给了DQNAgent,才触发了method类型不可迭代的错误,报错行号指向memory行是参数校验时的行号偏移导致的误指。
修复步骤
- 给
env.states、env.actions添加调用括号,获取实际的规格字典 - 恢复注释的网络配置参数,新版本中参数名改为
network - (可选)如果仍有内存参数报错,可以将
memory改为字典格式明确指定类型
修正后代码
import logging from tensorforce.environments.openai_gym import OpenAIGym from tensorforce.agents import DQNAgent from tensorforce.execution import Runner gym_id = 'CartPole-v0' max_episodes = 10000 max_timesteps = 1000 total_memory = 100 env = OpenAIGym(gym_id) network_spec = [ dict(type='dense', size=32, activation='tanh'), dict(type='dense', size=32, activation='tanh') ] agent = DQNAgent( states=env.states(), actions=env.actions(), network=network_spec, batch_size=64, memory=total_memory ) runner = Runner(agent, env) report_episodes = 10 def episode_finished(r): if r.episode % report_episodes == 0: logging.info("Finished episode {ep} after {ts} timesteps".format(ep=r.episode, ts=r.timestep)) logging.info("Episode reward: {}".format(r.episode_rewards[-1])) logging.info("Average of last 100 rewards: {}".format(sum(r.episode_rewards[-100:]) / 100)) return True print("Starting {agent} for Environment '{env}'".format(agent=agent, env=env)) runner.run(max_episodes, max_timesteps, episode_finished=episode_finished) runner.close() print("Learning finished. Total episodes: {ep}".format(ep=runner.episode))
可选兼容写法
如果遇到memory参数校验不通过,可以替换为明确的字典格式:
memory=dict(type='replay', capacity=total_memory)
内容的提问来源于stack exchange,提问作者Dylan Skinner
相关产品推荐
相关产品推荐

