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

遵循Keras官网DDPG摆锤示例时遇张量转换错误求助

解决DDPG摆锤示例中张量转换的ValueError问题

问题根源

你使用的Gym 0.26.2版本存在API破坏性变更:

  • env.reset() 返回值从单一观测数组变为 (观测数组, 信息字典) 的元组
  • env.step(action) 返回值从四元组 (观测, 奖励, 是否结束, 信息) 改为五元组 (观测, 奖励, 是否终止, 是否截断, 信息)

若代码直接将env.reset()的完整返回值赋值给prev_state,或从step返回值中错误获取了多元素结构,会导致prev_state成为非矩形序列(如元组),无法被tf.convert_to_tensor正常转换。

修复方案

1. 修正env.reset()调用

旧版Gym的代码写法:

prev_state = env.reset()

改为仅提取观测数组:

prev_state, _ = env.reset()

2. 修正env.step()调用与终止判断

旧版Gym的代码写法:

state, reward, done, info = env.step(action)

改为适配新版API的写法:

state, reward, terminated, truncated, info = env.step(action)
# 合并终止与截断条件,对应旧版的done
done = terminated or truncated

3. 验证prev_state的有效性

在转换张量前,可打印prev_state的类型和形状确认:

print(type(prev_state), prev_state.shape)

正常输出应为类似 <class 'numpy.ndarray'> (3,)(Pendulum环境的观测为3维数组)。

4. 可选:强制转换为numpy数组

若仍有异常,可先将观测转为numpy数组再转张量:

import numpy as np
tf_prev_state = tf.expand_dims(tf.convert_to_tensor(np.array(prev_state)), 0)

验证

修改后,tf.convert_to_tensor(prev_state)可将单一观测数组转换为张量,再通过tf.expand_dims添加批次维度,不会再触发非矩形序列的转换错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:20:24