Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
tensorflow-ValueError:decoder/while/Merge_12:0的形状不是循环的不变量_Tensorflow_Dynamic_While Loop_Decode - Fatal编程技术网

tensorflow-ValueError:decoder/while/Merge_12:0的形状不是循环的不变量

tensorflow-ValueError:decoder/while/Merge_12:0的形状不是循环的不变量,tensorflow,dynamic,while-loop,decode,Tensorflow,Dynamic,While Loop,Decode,我使用tf.contrib.seq2seq.dynamic_解码进行解码器训练 prediction, final_decoder_state, _ = dynamic_decode( custom_decoder ) 与自定义解码器 custom_decoder = CustomDecoder(decoder_cell, helper, decoder_init_state) 和助手 helper = CustomTrainingHelper(batch_size, targets

我使用tf.contrib.seq2seq.dynamic_解码进行解码器训练

prediction, final_decoder_state, _ = dynamic_decode(
    custom_decoder
)
与自定义解码器

custom_decoder = CustomDecoder(decoder_cell, helper, decoder_init_state)
和助手

helper = CustomTrainingHelper(batch_size, targets, stop_targets,
                              num_outs, outputs_per_step, 1.0, False)
动态_译码器产生错误

Traceback (most recent call last):
  File "E:/tasks/text_to_speech/tts/tf_seq2seq.py", line 95, in <module>
    custom_decoder
  File "C:\Users\User\Anaconda3\lib\site-packages\tensorflow\contrib\seq2seq\python\ops\decoder.py", line 304, in dynamic_decode
    swap_memory=swap_memory)
  File "C:\Users\User\Anaconda3\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 3224, in while_loop
    result = loop_context.BuildLoop(cond, body, loop_vars, shape_invariants)
  File "C:\Users\User\Anaconda3\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 2956, in BuildLoop
    pred, body, original_loop_vars, loop_vars, shape_invariants)
  File "C:\Users\User\Anaconda3\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 2930, in _BuildLoop
    next_vars.append(_AddNextAndBackEdge(m, v))
  File "C:\Users\User\Anaconda3\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 688, in _AddNextAndBackEdge
    _EnforceShapeInvariant(m, v)
  File "C:\Users\User\Anaconda3\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 632, in _EnforceShapeInvariant
    (merge_var.name, m_shape, n_shape))
ValueError: The shape for decoder/while/Merge_12:0 is not an invariant for the loop. It enters the loop with shape (10, 1), but has shape (?, 1) after one iteration. Provide shape invariants using either the `shape_invariants` argument of tf.while_loop or set_shape() on the loop variables.
回溯(最近一次呼叫最后一次):
文件“E:/tasks/text_to_speech/tts/tf_seq2seq.py”,第95行,在
自定义解码器
文件“C:\Users\User\Anaconda3\lib\site packages\tensorflow\contrib\seq2seq\python\ops\decoder.py”,第304行,动态解码
交换内存=交换内存)
文件“C:\Users\User\Anaconda3\lib\site packages\tensorflow\python\ops\control\u flow\u ops.py”,第3224行,在while\u循环中
结果=loop\u context.BuildLoop(cond、body、loop\u vars、shape\u不变量)
文件“C:\Users\User\Anaconda3\lib\site packages\tensorflow\python\ops\control\u flow\u ops.py”,第2956行,在BuildLoop中
pred、body、原始循环变量、循环变量、形状不变量)
文件“C:\Users\User\Anaconda3\lib\site packages\tensorflow\python\ops\control\u flow\u ops.py”,第2930行,在BuildLoop中
下一个变量追加(_AddNextAndBackEdge(m,v))
文件“C:\Users\User\Anaconda3\lib\site packages\tensorflow\python\ops\control\u flow\u ops.py”,第688行,位于\u AddNextAndBackEdge中
_强制形状变化(m,v)
文件“C:\Users\User\Anaconda3\lib\site packages\tensorflow\python\ops\control\u flow\u ops.py”,第632行,位于EnforceShapeInvariant中
(合并变量名称、m_形状、n_形状))
ValueError:decoder/while/Merge_12:0的形状不是循环的不变量。它以形状(10,1)进入循环,但在一次迭代后具有形状(?,1)。使用tf.while\u loop的'shape\u invariants'参数提供形状不变量,或者在循环变量上设置\u shape()。

批次大小等于10。据我所知,问题在于tf.while\u循环和批量大小。以何种方式可以修复此错误?提前感谢。

您提供的信息太少,无法具体说明。请以后跟我来

通常,此错误会告诉您以下信息。默认情况下,TensorFlow检查从while循环的一次迭代传递到下一次迭代的变量的形状是否不变。在您的例子中,
解码器/while/Merge_12:0
张量最初的形状是
(10,1)
,但经过一次迭代后,它变成了
(?,1)
,这意味着tensorflow无法再推断第一维度的大小

如果您知道第一个维度实际上是
10
,您可以使用告诉TensorFlow