Рассчитать реальную длину последовательности для переменной длины последовательности в TensorFlow? - PullRequest
0 голосов
/ 30 апреля 2018

Недавно я наткнулся на хороший и популярный блог Данияра Хафнера о переменных длинах последовательностей здесь . Он использовал следующую функцию для вычисления реальной длины для дополненной последовательности.

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. И пример интерпретирует нулевые строки в конце как дополненные. Таким образом, разные цифры имеют разную длину и, следовательно, могут использоваться для представления последовательности переменной длины. this architecture

Однако, функция выше длины также обрабатывает нулевые строки в начале последовательности как дополненные. Например, на следующем рисунке реальная длина должна быть 26, но функция получает 20.

Здесь что-то не так ??? 1015 *

enter image description here

1 Ответ

0 голосов
/ 30 апреля 2018

ИМХО, автор пытается быть "симпатичным", используя тензорный поток для пересчета длины последовательности в тензорном потоке вместо простого ее предоставления. Я думаю, что нет веских причин, чтобы сделать так.

  • информация уже известна, ее можно просто предоставить
  • пересчет основан на дополнительном допущении, что записи никогда не равны нулю

Последнее предположение определенно проблематично, можно представить себе множество ситуаций, когда нули являются абсолютно законными входными данными. Можно попытаться исправить это соглашение, используя вместо этого значения inf или nan, но зачем?

Кстати, пост довольно старый, и умный трюк, использованный для нарезки, теперь не имеет значения, поскольку тензор потока теперь поддерживает нарезку в стиле numpy.

...