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

keras-rl2的DQN Agent在Taxi-v3训练时遇ValueError求助

使用keras-rl2的DQNAgent解决Taxi-v3环境报错问题

问题背景

尝试用keras-rl2的DQNAgent解决OpenAI Gym的Taxi-v3问题,操作流程如下:

  • 从gym打开Taxi-v3环境
  • 用Keras Sequential API构建含Embedding和Dense层的深度学习模型
  • 导入Epsilon Greedy策略与Sequential Memory队列
  • 组装DQNAgent并编译

拟合模型时触发错误,相同代码在CartPole环境下正常运行,推测是Taxi-v3状态为标量(共500种),而CartPole是4元素数组导致。同时希望将单轮训练步数扩展至200以上(已设置env._max_episode_steps=5000)。

错误回溯

Training for 1000000 steps ...
Interval 1 (0 steps performed)

---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

<ipython-input-180-908ee27d8389> in <module>
      1 agent.compile(Adam(lr=0.001),metrics=['mae'])
----> 2 agent.fit(env, nb_steps=1000000, visualize=False, verbose=1, nb_max_episode_steps=99, log_interval=100000)

/usr/local/lib/python3.8/dist-packages/rl/core.py in fit(self, env, nb_steps, action_repetition, callbacks, verbose, visualize, nb_max_start_steps, start_step_policy, log_interval, nb_max_episode_steps)
    179                         observation, r, done, info = self.processor.process_step(observation, r, done, info)
    180                     for key, value in info.items():
--> 181                         if not np.isreal(value):
    182                             continue
    183                         if key not in accumulated_info:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

复现代码

#import environment and visualization
import gym
from gym import wrappers
!pip install gym[classic_control]

#import Deep Learning api
import tensorflow as tf
from tensorflow.keras.models import Model, Sequential
from tensorflow.keras.layers import Dense, Flatten, Input, Embedding,Reshape
from tensorflow.keras.optimizers import Adam

#import rl agent library
!pip install gym
!pip install keras
!pip install keras-rl2

#data manipulation
import numpy as np
import pandas as pd
import random 
#0
env = gym.make('Taxi-v3')
env.reset()
actions=env.action_space.n
states=env.observation_space.n
#1
def build_model(states,actions):
  model=Sequential()
  model.add(Embedding(states,10, input_length=1))
  model.add(Reshape((10,)))
  model.add(Dense(32,activation='relu'))
  model.add(Dense(32,activation='relu'))
  model.add(Dense(actions,activation='linear'))
  return model
#2
import rl
from rl.agents import DQNAgent
from rl.policy import EpsGreedyQPolicy
from rl.memory import SequentialMemory

policy=EpsGreedyQPolicy()
memory=SequentialMemory(limit=100000,window_length=1)
#3
agent=DQNAgent(model=model1,memory=memory,policy=policy,nb_actions=actions,nb_steps_warmup=500, target_model_update=1e-2)
agent.compile(Adam(lr=0.001),metrics=['mae'])

agent.fit(env, nb_steps=1000000, visualize=False, verbose=1, nb_max_episode_steps=99,

解决方案

1. 修复info字典数组判断问题

报错根源是Taxi-v3环境返回的info字典中包含数组类型的值,而keras-rl2的fit方法中np.isreal(value)无法直接处理数组,推荐通过自定义处理器(Processor)过滤info中的非实数数组,无需修改库源码:

from rl.core import Processor

class TaxiProcessor(Processor):
    def process_step(self, observation, reward, done, info):
        # 只保留info中的标量实数
        filtered_info = {k: v for k, v in info.items() if np.isscalar(v) and np.isreal(v)}
        return observation, reward, done, filtered_info

初始化DQNAgent时指定该处理器:

agent=DQNAgent(
    model=model1,
    memory=memory,
    policy=policy,
    nb_actions=actions,
    nb_steps_warmup=500, 
    target_model_update=1e-2,
    processor=TaxiProcessor()
)

2. 扩展单轮训练步数

你已设置env._max_episode_steps=5000,但agent.fit中的nb_max_episode_steps=99会覆盖这个设置,需要删除该参数或调整为对应值:

agent.fit(
    env, 
    nb_steps=1000000, 
    visualize=False, 
    verbose=1, 
    log_interval=100000
    # 移除nb_max_episode_steps=99,或改为nb_max_episode_steps=5000
)

3. 修正模型初始化遗漏问题

代码中agent=DQNAgent(model=model1,...)的model1未定义,需先调用build_model生成模型:

model1 = build_model(states, actions)  # 补充该行
agent=DQNAgent(model=model1,memory=memory,policy=policy,nb_actions=actions,nb_steps_warmup=500, target_model_update=1e-2)

内容的提问来源于stack exchange,提问作者kaispace30098

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:35:51