我正在尝试使用TF来解决一个自定义的健身房环境,都在谷歌Colab内。
- 主脚本是TF“DQN教程”,可在此处获得。
- 我使用
env_name = "gym_examples/GridWorld-v0"
代替env_name = "CartPole-v0"
,其中gym_examples/GridWorld-v0
是gym文档中描述的示例自定义环境。(该示例使用gym v0.25.0,但TF要求gym〈= v0.23.0,因此我还必须对渲染代码进行一些调整,使其在v0.23.0中工作。)
环境通过env = suite_gym.load(env_name)
加载正常,后续代码单元也运行正常,直到出现以下两个单元:
第一个
在该单元格之后,我得到一个错误:
ValueError: Exception encountered when calling layer "sequential_2" (type Sequential).
Layer "dense_6" expects 1 input(s), but it received 2 input tensors. Inputs received: [<tf.Tensor: shape=(1, 2), dtype=int64, numpy=array([[2, 2]])>, <tf.Tensor: shape=(1, 2), dtype=int64, numpy=array([[3, 2]])>]
Call arguments received by layer "sequential_2" (type Sequential):
• inputs={'agent': 'tf.Tensor(shape=(1, 2), dtype=int64)', 'target': 'tf.Tensor(shape=(1, 2), dtype=int64)'}
• network_state=()
• kwargs={'step_type': 'tf.Tensor(shape=(1,), dtype=int32)', 'training': 'None'}
In call to configurable 'DqnAgent' (<class 'tf_agents.agents.dqn.dqn_agent.DqnAgent'>)
我是一个太多的TF新手,不明白这里发生了什么。我怀疑这是因为动作状态从2个状态(在CartPole中)变成了4个状态(在自定义GridWorld环境中)。但除此之外,我无法理解。
1条答案
按热度按时间3okqufwl1#
这可以通过使用Embedding layer作为第一层来解决。在本例(
Embedding(16, 4)
)中,16是网格大小(4x4),4是输出尺寸。例如,用下面的代码替换上面的行将消 debugging 误。
来源及进一步解释:https://martin-ueding.de/posts/reinforcement-learning-with-frozen-lake/