需要帮助破译tensorflow feed InvalidArgumeInterror吗

需要帮助破译tensorflow feed InvalidArgumeInterror吗,tensorflow,Tensorflow,我不认为我理解tensorflow的这个提要错误 Debug: [[ 0. 0.]] Debug: (1, 2) Debug: float64 2018-05-09 09:56:34.615561: W tensorflow/core/kernels/queue_base.cc:295] _0_input_producer: Skipping cancelled enqueue attempt with queue not closed Traceback (most recent cal

我不认为我理解tensorflow的这个提要错误

Debug:  [[ 0.  0.]]
Debug: (1, 2)
Debug: float64

2018-05-09 09:56:34.615561: W tensorflow/core/kernels/queue_base.cc:295] _0_input_producer: Skipping cancelled enqueue attempt with queue not closed
Traceback (most recent call last):
  File "/home/kiran/anaconda3/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1323, in _do_call
    return fn(*args)
  File "/home/kiran/anaconda3/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1302, in _run_fn
    status, run_metadata)
  File "/home/kiran/anaconda3/lib/python3.6/site-packages/tensorflow/python/framework/errors_impl.py", line 473, in __exit__
    c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.InvalidArgumentError: You must feed a value for placeholder tensor 'seqModel/a_prev' with dtype double and shape [1,2]
         [[Node: seqModel/a_prev = Placeholder[dtype=DT_DOUBLE, shape=[1,2], _device="/job:localhost/replica:0/task:0/device:GPU:0"]()]]
我输入占位符的方式是:

self.a_prev = tf.placeholder(tf.float64, shape=[1,2], name='a_prev')

batch = tf.train.batch([self.x_acc, self.y_acc,
                        self.prev_pos], 
                        batch_size=1, capacity=20000, num_threads=1)

x_acc, y_acc, prev_pos = sess.run(batch)
test = np.array([[ x_acc[0,0], y_acc[0,0] ]])

print("Debug: ",test)
print("Debug:",test.shape)
print("Debug:",test.dtype)

_,X_hat_val,loss_val, X_val = sess.run([train,X_hat,loss, self.X],  
                                    feed_dict={self.a_prev : np.array([[x_acc[0,0],y_acc[0,0] ]]),
self.pos1 :  np.array([[ prev_pos[0,0] ]])
})

该错误没有意义,因为我正在向占位符提供值,但它表示没有值。这是什么意思?

注意:我没有运行您的代码,因为它取决于不可用的数据

但是,您的错误可能是由于重新分配self.a_prev属性行而导致的。通过这一行,self.a_prev不再指向tf.placeholder…,name='a_prev',而是指向与self.new_证据不同的张量-因此实际的占位符在运行时不会被输入

这个假设的一个例子

导入tensorflow作为tf 将numpy作为np导入 x_acc=np.random.rand2,2 y_acc=np.random.rand2,2 a_prev=tf.placeholder tf.float64,shape=[1,2],name='a_prev' 某些结果=tf.adda_prev,1。 a_prev=tf.常数[-1,-1]] ... 现在python变量不再指向占位符, 因此,占位符存在于图中,没有指向它的python指针。 将tf.Session作为SES: res=sess.runsome_results,feed_dict={a_prev:np.array[[x_acc[0,0],y_acc[0,0]]} a_prev常量被赋值,而不是a_prev占位符, 因此是一个错误。 InvalidArgumentError回溯见上文:您必须为占位符张量“a_prev”提供一个值,其中数据类型为double,形状为[1,2] [[Node:a_prev=Placeholderdtype=DT_DOUBLE,shape=[1,2], _device=/job:localhost/replica:0/task:0/device:GPU:0][[Node:Add/\u 1=\u Recvclient\u terminated=false, recv_device=/job:localhost/replica:0/task:0/device:CPU:0, send_device=/job:localhost/replica:0/task:0/device:GPU:0, 发送\u设备\u化身=1,张量\u名称=边缘\u 8\u添加, 张量类型=DT双, _device=/job:localhost/replica:0/task:0/device:CPU:0]]


请提供一份报告。您提供的代码无法再现您的错误。我在github上有一个存储库,详细说明了完整的代码,但提供了基本的细节,使其易于处理。很抱歉,我花了一些时间将代码推送到repo。它应该在第25行显示self.a_prev。感谢您的分析。我明白你的观点,但错误在于将占位符张量'seqModel/a_prev'a_prev的值识别为占位符张量。我确信这会在以后给我带来错误。只是为了澄清我的假设:您的错误是,名为='seqModel/a_prev'的占位符不是fed值,即使您给feed dict键self.a_prev加了一些值。因此,我假设self.a_prev不再指向占位符,TF会注意到名为seqModel/a_prev的实际占位符实际上没有被输入,并在其名称中抛出这样一个错误。我用一个例子编辑了我的答案。再一次,我可能错了,是其他原因造成的