从数组中提供一个 tensorflow 占位符

Feeding a tensorflow placeholder from an array

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

让我们从 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.

的对象相匹配

Can someone clarify how action_dim should be used to resolve this error?

您的环境的操作似乎有两个来自值 [=​​15=] 的组件,但您只提供了 one 组件,这是从您的错误 ((128,)) 中推断出来的。你需要解决这个问题。希望这有帮助。