【问题标题】:tensorflow Variable error: shape error even though shape is oktensorflow变量错误:形状错误,即使形状没问题
【发布时间】:2019-02-04 15:32:42
【问题描述】:

您好,我一直在尝试为二十一点制作 RL 程序。 我用 Q-network 制作了所有代码,它可以工作。 但是我使用 DQN 的新代码有一个关于形状的错误。

X=tf.placeholder(shape=[1,state_number],dtype=tf.float32)
W1=tf.Variable(tf.random_uniform([state_number,128],0,0.01))#network for update
layer1=tf.nn.tanh(tf.matmul(X,W1))

这是一个图表,运行代码如下

Qs=sess.run(Qpred,feed_dict={X:one_hot(s)} 

我通过这段代码检查了 one_hot(s) 的形状,结果如下

print(np.shape(one_hot(s)))
(1, 600)

错误码是这样的。

tensorflow.python.framework.errors_impl.InvalidArgumentError: You must feed 
a value for placeholder tensor 'Placeholder' with dtype float and shape [1,600]
 [[Node: Placeholder = Placeholder[dtype=DT_FLOAT, shape=[1,600], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

在 Q-network 代码中,它可以工作。不知道为什么这次它突然不起作用了。 请帮帮我。谢谢

【问题讨论】:

  • 1. Qpred 是什么? 2.您在哪里提供state_number
  • 你确定one_hot 的输出是一个浮点数吗?可能是类型问题。
  • 这还有问题吗?

标签: python tensorflow deep-learning reinforcement-learning


【解决方案1】:

我从代码中假设变量state_number 等于600。我还猜想one_hot() 函数返回的值是整数(这很常见)。 如果所有这些都是真的,请尝试将one_hot() 的输出转换为 float32:

X = tf.placeholder(shape=[1,state_number],dtype=tf.float32)
W1 = tf.Variable(tf.random_uniform([state_number,128],0,0.01))#network for update
layer1 = tf.nn.tanh(tf.matmul(X,W1))

然后:

Qs = sess.run(Qpred,feed_dict={X:one_hot(s).astype(np.float32)} )

【讨论】:

  • 感谢您的回答。是的 state_number 是 600。我试过你告诉我的,但它仍然会犯同样的错误。我有一个没有 DQN 但用于 Q 网络的代码。并且 tensorflow 的主要代码几乎相同.. idk 为什么会出现错误:(
  • 您是否 100% 确定引发异常的占位符是 X?尝试重命名占位符(即X=tf.placeholder(tf.float32, shape=[1,state_number], name='input_data'))并再次运行代码。如果是这个占位符引发异常,那么您应该在错误消息中看到“input_data”而不是“Placeholder”。在相反的情况下,请确保在 feed_dict 中为每个占位符提供一个值。
  • 我做到了,错误消息是这样的。tensorflow.python.framework.errors_impl.InvalidArgumentError: You must feed a value for placeholder tensor 'input_data' with dtype float and shape [1,600] [[节点:input_data = Placeholder[dtype=DT_FLOAT, shape=[1,600], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
  • 我打印了形状和输入。 (1, 600) [[0. 0. 0........ 0. 0.]]。它看起来像它的 [1,600] 形状和 float32...
  • 您确定没有重新分配变量 X 吗?尝试通过调用变量名而不是直接 X 来提供一个热向量:即使用 Qs = sess.run(Qpred,feed_dict={'input_data:0' : one_hot(s).astype(np.float32)} )
猜你喜欢
  • 1970-01-01
  • 2017-10-25
  • 1970-01-01
  • 2017-05-02
  • 1970-01-01
  • 1970-01-01
  • 2017-04-17
  • 1970-01-01
  • 2020-12-14
相关资源
最近更新 更多