Ошибка при использовании динамического рН (пурпурный): размеры входов должны совпадать: форма [0] = [1,38] против формы [1] = [128,512] - PullRequest
0 голосов
/ 15 мая 2018

Итак, я запускаю этот код из пурпурного с некоторыми изменениями:

outputs, final_state = tf.nn.dynamic_rnn(
                self.cell,
                m_seq,
                sequence_length=lens,
                initial_state=initial_state,
                swap_memory=swap_memory,
                parallel_iterations=parallel_iterations)

, где self.cell - это ячейка MultiRNN с двумя слоями, m_seq - это один горячий вектор длины с формой [1,38], а state - это кортеж из двух LSTMStateTuple с c и h имеет форму [128,512] (размер партии и размер слоя).

Когда я запускаю это, я получаю:

InvalidArgumentError (см. Выше для отслеживания): ConcatOp: Размеры входов должны совпадать: shape [0] = [1,38] против shape [1] = [128,512]

Теперь я понимаю, что это означает несоответствие между входом m_seq и состоянием. Однако должны ли оба размера совпадать (1 и 128, 38 и 512)? Я не очень понимаю, почему это так. почему они должны соответствовать вообще, так как это динамическое число.

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

ConcatOp: размеры входов должны совпадать

Я верю, что это отвечает на мой вопрос. Размер пакета (первый аргумент) должен совпадать, но второй (длина последовательности) не должен совпадать, потому что это динамический RNN. В любом случае можно использовать заполнитель для принятия пакетов разных размеров.

0 голосов
/ 15 мая 2018

Из динамические документы RNN :

Первые два измерения должны совпадать по всем входам, но в противном случае ранги и другие компоненты формы могут отличаться.

Таким образом, входные размеры должны совпадать, даже если это динамический RNN.

...