Недавно я наткнулся на хороший и популярный блог Данияра Хафнера о переменных длинах последовательностей здесь . Он использовал следующую функцию для вычисления реальной длины для дополненной последовательности.
def length(sequence):
used = tf.sign(tf.reduce_max(tf.abs(sequence), 2))
length = tf.reduce_sum(used, 1)
length = tf.cast(length, tf.int32)
return length
Однако я чувствовал, что эта функция длины может быть проблематичной в его примере кода , где он применяет RNN к набору данных mnist. Насколько я понимаю, код обрабатывает строки рукописного изображения как временные шаги, аналогичные следующей архитектуре, за исключением того, что он использует последний соответствующий вывод для ввода softmax. И пример интерпретирует нулевые строки в конце как дополненные. Таким образом, разные цифры имеют разную длину и, следовательно, могут использоваться для представления последовательности переменной длины.
Однако, функция выше длины также обрабатывает нулевые строки в начале последовательности как дополненные. Например, на следующем рисунке реальная длина должна быть 26, но функция получает 20.
Здесь что-то не так ??? 1015 *