强化学习代理构建 DQNAgent 导致未知问题

问题描述

我想进入一点强化学习,所以我按照一个动手教程从相当简单的例子“Cartpole”开始。 Github link of the tutorial source code (identical with mine) 不幸的是,我被同样的错误困了两天,找不到基于 TypeError 的类似问题/解决方案。错误消息如下:

*File "C:\Users\Felix\DropBox\Pendelcart.py",line 40,in dqn = build_agent(model,actions)

文件“C:\Users\Felix\DropBox\Pendelcart.py”,第 29 行,在 build_agent 中 dqn = DQNAgent(model=model,memory=memory,policy=policy,nb_actions =actions,

文件“C:\Users\Felix\AppData\Roaming\Python\python38\site-packages\rl\agents\dqn.py”,第 108 行,在 init if hasattr(model.output,'len') 和len(model.output) > 1:

文件“C:\Users\Felix\AppData\Roaming\Python\python38\site-packages\tensorflow\python\keras\engine\keras_tensor.py”,第 240 行,在 len raise TypeError('Keras Symbolics Inputs/输出不 '

TypeError:Keras 符号输入/输出未实现 len。您可能正在尝试将 Keras 符号输入/输出传递给未注册分派的 TF API,从而阻止 Keras 自动将 API 调用转换为功能模型中的 lambda 层。如果您尝试直接断言符号输入/输出,也会引发此错误。*

我真的希望这里有人可以帮助我。我使用 Pyhton 3.8、Tensorflow 2.4.0 和 Keras 2.4.3。完整的源代码附在下面。

提前致谢,节日快乐。

import gym
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense,Flatten
from tensorflow.keras.optimizers import Adam
from rl.agents import DQNAgent
from rl.policy import BoltzmannQPolicy
from rl.memory import SequentialMemory


def build_model(states,actions):
    model = Sequential()
    # model.add(Input(shape=(1,states)))
    model.add(Flatten(input_shape=(1,states)))
    model.add(Dense(24,activation='relu'))
    model.add(Dense(24,activation='relu'))
    model.add(Dense(actions,activation='linear'))
    return model

def build_agent(model,actions):
    policy = BoltzmannQPolicy()
    memory = SequentialMemory(limit = 50000,window_length=1)
    dqn = DQNAgent(model=model,nb_steps_warmup=10,target_model_update=1e-2)
    return dqn

env = gym.make('CartPole-v0')
states = env.observation_space.shape[0]
actions = env.action_space.n

model = build_model(states,actions)
model.summary()

dqn = build_agent(model,actions)
dqn.compile(Adam(lr=1e-3),metrics=['mae'])
dqn.fit(env,nb_steps=50000,visualize= False,verbose=1)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)