You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:36:07