tenorflow - ValueError: форма для декодера / while / Merge_12: 0 не является инвариантом для цикла - PullRequest
0 голосов
/ 03 июня 2018

Я использую tf.contrib.seq2seq.dynamic_decode для обучения декодера

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.

batch_size равен 10. Как я понимаю, проблема в tf. while_loop и batch_size.Каким образом можно исправить эту ошибку?Заранее спасибо.

1 Ответ

0 голосов
/ 12 июня 2018

Вы предоставили слишком мало информации, чтобы сказать что-то конкретное.Пожалуйста, следуйте (https://stackoverflow.com/help/mcve) в будущем.

В общем, эта ошибка говорит вам следующее. По умолчанию TensorFlow проверяет, что переменные передаются из одной итерации цикла while в следующую,не меняйте форму. В вашем случае тензор decoder/while/Merge_12:0 изначально имел форму (10, 1), но после одной итерации он стал (?, 1), означая, что тензор потока больше не может выводить размер первого измерения.

Если вы знаете, что первое измерение действительно 10, вы можете использовать Tensor.set_shape , чтобы сообщить об этом TensorFlow.

...