从数组中提供tensorflow占位符

时间:2017-10-29 05:13:12

标签: tensorflow reinforcement-learning q-learning openai-gym

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

1 个答案:

答案 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,))推断出来的。你需要解决这个问题。希望这会有所帮助。