Что эквивалентно функции Кераса Masking () в тензорном потоке? И поддерживает ли пакетная норма, конвенция и повторное маскирование?

Я тренирую уровень ГРУ, где входные данные не имеют одинаковой длины. Поэтому я добавил к функциям входов 0,0, чтобы все последовательности имели одинаковую длину. С другой стороны, я не хочу вычислять какие-либо потери на любом временном шаге для любой выборки, пока входной вектор признаков - это все нули. Например, на временном шаге 1000 у меня есть размер пакета 34, но в образцах с номерами 33 и 34 этого пакета отсутствуют данные или значения признаков на временном шаге 1000.

Я обнаружил, что мы можем использовать метод Masking()(inputs) в Keras, если все последующие уровни или операции поддерживают masking. Но я реализовал свою модель в тензорном потоке. Так в чем же эквивалентность Masking() в тензорном потоке?

Во-вторых, как я могу узнать, поддерживает ли batch normalization, слой conv и какая-либо функция non linear activation функцию masking() в Keras?

Ваша помощь очень ценится !!

Conv1D не поддерживает маскировку. Это я говорю на собственном опыте. Не уверен насчет других.

Upasana Mittal 10.08.2018 17:10
Udacity Nanodegree Capstone Project: Классификатор пород собак
Udacity Nanodegree Capstone Project: Классификатор пород собак
Вы можете ознакомиться со скриптами проекта и данными на github .
3
1
560
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, я нашел подробное решение в блоге danijar https://danijar.com/variable-sequence-lengths-in-tensorflow/.

Маскировка в keras используется при наличии неполных последовательностей. Поэтому обычно вам нужно дополнить свои последовательности 0,0 в третьем измерении (измерение функции; когда входное измерение имеет shape = [batch_size, sequence_length, num_features]). После этого маскирование в keras будет принимать число, будет выводить 0 для их активации.

В итоге: он показал, как вычислить длину последовательности для каждого образца в партии, используя реализованный им length(). Затем выходной вектор подается в dynamic_rnn, который выводит нулевые векторы для неполных последовательностей (для состояний и выходов), что в некоторой степени похоже на то, что происходит в функции Keras Masking(). Во-вторых, мы должны использовать mask при вычислении функции потерь.

Все подробности обсуждаются в этом сообщении в блоге.

Но что касается поддержки маскировки в batch_norm, conv и non linear activation function; обычно, если на выходе LSTM есть нули; то в случае с функцией активации sigmoid на выходе; производная выхода относительно входа сигмовидной функции - output(1 - output). Следовательно, когда выход равен 0, эта производная также равна нулю. И поскольку обратное распространение применяет правило цепочки, тогда градиенты текущей выборки по отношению к любому параметру веса в сети также будут равны 0. Следовательно, нет необходимости беспокоиться о поддержке ... Но проблема возникает, когда активация повторяется, например, это когда градиенты должны быть явно умножены на нули перед выполнением обратного распространения (я думаю). Может быть, что-то вроде этого поможет:

final_output = output * mask

Тогда производной final_output по отношению к output будет маска => 0 или 1 (любой временной шаг; для любого образца). Затем распространите этот градиент обратно от output функции активации на его входы ... с последующим правилом цепочки => веса в этом случае не будут затронуты.

Другие вопросы по теме