0

我正在尝试使用 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 来解决这个错误吗?

4

1 回答 1

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_dimis 2。很容易看出你正在放置一个形状对象来(128,)代替张量,张量期望像(?, 2)ie这样的形状(None, 2)

所以你需要检查你的feed_dict那是你搞砸的地方。您的 placeholderaction_in的尺寸应该与您放入的对象相匹配feed_dict

有人可以澄清应该如何使用 action_dim 来解决这个错误吗?

似乎您的环境的操作具有来自 value 的两个组件action_dim,但您只提供one组件,这是从您的 error( (128,)) 推断出来的。你需要解决这个问题。希望这可以帮助。

于 2017-10-29T06:08:24.283 回答