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

Stable Baselines3训练报错ValueError: too many values to unpack (expected 2)

解决Stable Baselines3训练CartPole时的ValueError问题

错误原因分析

你遇到的ValueError: too many values to unpack (expected 2),核心问题是环境包装方式错误:你先创建了单个gym环境实例,然后让DummyVecEnv的lambda反复返回这个同一个实例,导致环境内部状态混乱,触发解包错误。

具体修复步骤

1. 修正环境包装代码

把原代码中创建和包装环境的两行:

env = gym.make(Environment_name)
env = DummyVecEnv([lambda: env])

改成:

env = DummyVecEnv([lambda: gym.make(Environment_name)])

这样DummyVecEnv的每个子环境都是全新的实例,不会出现状态冲突。

2. 自动创建日志目录

原代码只定义了日志路径,但没自动创建目录,加上一行代码确保目录存在:

os.makedirs(log_path, exist_ok=True)

exist_ok=True表示如果目录已经存在,不会报错。

3. (可选)检查依赖版本兼容性

如果修复后仍有问题,可能是gym和stable-baselines3版本不兼容:

  • 可以安装兼容版本:
    pip install gym==0.25.2 stable-baselines3==1.7.0
    
  • 或者把环境名称改成CartPole-v1(新版本gym中v0被标记为旧版)。

修复后的完整代码

import os
import gym
from stable_baselines3 import PPO
from stable_baselines3.common.vec_env import DummyVecEnv
from stable_baselines3.common.evaluation import evaluate_policy

Environment_name = 'CartPole-v0'
log_path = os.path.join('Training', 'Logs')
# 自动创建日志目录
os.makedirs(log_path, exist_ok=True)
# 正确包装环境:每次创建新实例
env = DummyVecEnv([lambda: gym.make(Environment_name)])
model = PPO('MlpPolicy', env, verbose=1, tensorboard_log=log_path)

model.learn(total_timesteps=20000)

运行这段代码后,终端应该会输出类似教程里的训练日志,比如每一步的奖励、损失等信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:10:15