我正在尝试使用Q学习训练CatPole-v0。当尝试使用经验更新重播缓冲区时,我收到以下错误:
ValueError: Cannot feed value of shape (128,) for Tensor 'Placeholder_1:0', which has shape '(?, 2)'
相关的代码段是:
def update_replay_buffer(replay_buffer, state, action, reward, next_state, done, action_dim):
# append to buffer
experience = (state, action, reward, next_state, done)
replay_buffer.append(experience)
# Ensure replay_buffer doesn't grow larger than REPLAY_SIZE
if len(replay_buffer) > REPLAY_SIZE:
replay_buffer.pop(0)
return None
要投放的占位符是
action_in = tf.placeholder("float", [None, action_dim])
有人可以澄清应该如何使用action_dim来解决此错误吗?
答案 0 :(得分:0)
让我们从action_in
开始:
action_in = tf.placeholder("float", [None, action_dim])
这意味着action_in
的形状可以像(None, action_dim)
一样,除此之外别无其他。并从错误:
ValueError: Cannot feed value of shape (128,) for Tensor 'Placeholder_1:0', which has shape '(?, 2)'
从错误看来,action_dim
似乎是2
。
很容易看出你正在放置一个形状(128,)
的物体来代替张量,这个张量期望像(?, 2)
那样的形状,即(None, 2)
。
因此,您需要检查feed_dict
您所处理的地方。您的占位符action_in
的维度应与您feed_dict
中放置的对象相匹配。
有人可以澄清如何使用action_dim解决此问题 错误?
似乎您的环境的操作包含两个来自action_dim
值的组件,但您只提供one
组件,这是从您的错误((128,)
)推断出来的。你需要解决这个问题。希望这会有所帮助。