首页 > 解决方案 > TypeError:“方法”类型的参数不可迭代(Tensorforce DQN 教程)

问题描述

我正在尝试使用 DQN 算法做一个 tensorforce 教程,但我遇到了一些错误。自编写本教程以来,似乎 tensorforce 已经更新,所以我试图通过文档自己解决问题。任何人,这是我的代码。

import logging

from tensorforce.environments.openai_gym import OpenAIGym
from tensorforce.agents import DQNAgent
from tensorforce.execution import Runner

# def main():
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_spec=env.states,
    # actions_spec=env.actions,
    states=env.states,
    actions=env.actions,
    # network_spec=network_spec,
    batch_size=64,
    memory=total_memory  <-- Here is where my error is coming from.
)

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))

# if __name__ == '__main__':
#     main

错误源于

memory=total_memory

此处找到的文档说需要内存并且它必须是 int>0,所以我很困惑。任何帮助都会很甜蜜。

编辑 这是回溯代码。

Traceback (most recent call last):
  File "test3.py", line 19, in <module>
    agent = DQNAgent(
  File "/home/dskinner/.local/lib/python3.8/site-packages/tensorforce/agents/dqn.py", line 217, in __init__
    super().__init__(
  File "/home/dskinner/.local/lib/python3.8/site-packages/tensorforce/agents/tensorforce.py", line 441, in __init__
    super().__init__(
  File "/home/dskinner/.local/lib/python3.8/site-packages/tensorforce/agents/agent.py", line 243, in __init__
    super().__init__(
  File "/home/dskinner/.local/lib/python3.8/site-packages/tensorforce/agents/recorder.py", line 50, in __init__
    if 'type' in states or 'shape' in states:
TypeError: argument of type 'method' is not iterable

标签: pythonreinforcement-learningdqn

解决方案


推荐阅读