Должен ли я делать маскировку потерь при использовании переменной длины последовательности в Dynamic_RNN

В настоящее время я создаю модель для классификации текста, используя Dynamic RNN в tf. Мои входы имеют разную длину, поэтому я дополнил входы одинаковой (максимальной) длиной.

Я использовал аргумент sequence_length в tf.nn.dynamic_rnn для подачи списка каждой входной длины.

Мой вопрос:

Должен ли я делать маскировку потерь? и Когда делать маскировку потерь?


person Mohamed Atef    schedule 15.04.2018    source источник


Ответы (1)


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

Ссылка: https://www.tensorflow.org/api_docs/python/tf/nn/dynamic_rnn. Посмотрите информацию об аргументе sequence_length.

person Ankit Goyal    schedule 15.04.2018
comment
Если вы передаете список sequence_length, то внутри цикла Rnn tensorflow копирует последнее состояние через вычисления ‹pad›. Вам все равно придется дополнять последовательности нулями, даже если вы отправляете длины последовательности. Нет необходимости делать маскировку потерь. - person Animesh Karnewar; 18.04.2018
comment
Я попробовал это сам, напечатал и состояния, и выходы, и оказалось, что мне не нужно делать маскировку потерь, спасибо :) - person Mohamed Atef; 18.04.2018