嗨,我一直在尝试制作二十一点的RL程序。 我用Q网络制作了所有代码,并且可以正常工作。 但是我使用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网络代码中起作用。 idk为什么它这次突然不起作用。 请帮我。谢谢
答案 0 :(得分:0)
我从代码中假设变量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)} )