不同长度输入和输出的Tensorflow Seq2Seq错误

2024-06-25 05:42:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在研究一个基于this教程的seq2seq模型(做了一些修改,试图使它能够处理不同长度的输入和输出),只使用我自己的带有填充符号的数据集。但每当我尝试使用不同长度的输入和输出时,每当我试图从中得到预测时,总会得到以下错误:

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'labels0' with dtype int32
 [[Node: labels0 = Placeholder[dtype=DT_INT32, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

作为记录,这里是我在代码中定义变量和那些东西的重要部分

价值:

^{pr2}$

Seq2Seq型号:

decOut, decMem = seq2seq.embedding_rnn_seq2seq(encInput, decInput, cell, vocabSizeT, vocabSizeH, embeddingDim, feed_previous = False)

损失:

loss = seq2seq.sequence_loss(decOut, labels, weights, vocabSizeT)

测试输入:

feed_dic = {encInput[t]: batchX[t] for t in range(seqLengthT)}  feed_dic[keep_prob] = 1

下面这条线似乎引起了所有的问题:

decOutBat = sess.run(decOut, feed_dic)

对我来说没有意义的是,我想尽了一切办法,却一无所获。我已经确定我在一个数组中输入了正确的数据类型,我已经确保了所有变量的长度都是正确的。有趣的是,对于第一个输入,即“GO”符号,它可以正常工作,但之后就不起作用了。当我用相等的序列长度运行它,输入和输出都很好,运行正常。我只想让它这样运行,因为当我输出预测时,它说它们都是0,这是pad序列,我不完全理解如何实现bucketing,所以这是我最好的选择。在

任何帮助都将不胜感激

编辑:以下是完整的堆栈跟踪:

Traceback (most recent call last):
  File "/home/tucker/anaconda3/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 972, in _do_call
    return fn(*args)
  File "/home/tucker/anaconda3/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 954, in _run_fn
    status, run_metadata)
  File "/home/tucker/anaconda3/lib/python3.5/contextlib.py", line 66, in __exit__
    next(self.gen)
  File "/home/tucker/anaconda3/lib/python3.5/site-packages/tensorflow/python/framework/errors.py", line 463, in raise_exception_on_not_ok_status
    pywrap_tensorflow.TF_GetCode(status))
tensorflow.python.framework.errors.InvalidArgumentError: You must feed a value for placeholder tensor 'labels2' with dtype int32
     [[Node: labels2 = Placeholder[dtype=DT_INT32, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "run.py", line 57, in <module>
    bTest(testX, testY, batchSize)
  File "network.pyx", line 383, in network.bTest (network.c:8672)
    output = test(eX)
  File "network.pyx", line 243, in network.test (network.c:6589)
    decOutBat = sess.run(decOut, feed_dic)
  File "/home/tucker/anaconda3/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 717, in run
    run_metadata_ptr)
  File "/home/tucker/anaconda3/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 915, in _run
    feed_dict_string, options, run_metadata)
  File "/home/tucker/anaconda3/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 965, in _do_run
    target_list, options, run_metadata)
  File "/home/tucker/anaconda3/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 985, in _do_call
    raise type(e)(node_def, op, message)
tensorflow.python.framework.errors.InvalidArgumentError: You must feed a value for placeholder tensor 'labels2' with dtype int32
     [[Node: labels2 = Placeholder[dtype=DT_INT32, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

Caused by op 'labels2', defined at:
  File "run.py", line 30, in <module>
    encInput, labels, weights, decInput, prevMem = createVariables(seqLengthT, seqLengthH, batchSize, vocabSizeT, vocabSizeH, embeddingDim, memoryDim)
  File "/home/tucker/anaconda3/lib/python3.5/site-packages/tensorflow/python/ops/array_ops.py", line 1332, in placeholder
    name=name)
  File "/home/tucker/anaconda3/lib/python3.5/site-packages/tensorflow/python/ops/gen_array_ops.py", line 1748, in _placeholder
    name=name)
  File "/home/tucker/anaconda3/lib/python3.5/site-packages/tensorflow/python/framework/op_def_library.py", line 749, in apply_op
    op_def=op_def)
  File "/home/tucker/anaconda3/lib/python3.5/site-packages/tensorflow/python/framework/ops.py", line 2380, in create_op
    original_op=self._default_original_op, op_def=op_def)
  File "/home/tucker/anaconda3/lib/python3.5/site-packages/tensorflow/python/framework/ops.py", line 1298, in __init__
    self._traceback = _extract_stack()

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'labels2' with dtype int32
     [[Node: labels2 = Placeholder[dtype=DT_INT32, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

Tags: runinpyhomelibpackagestensorflowfeed