2017-01-23 5 views
0

Я пытаюсь понять и реализовать LSTM. Я понимаю, что им нужно определить длину последовательности T, и обучение выполняется партиями. Таким образом, мы подали в сеть несколько последовательностей длины T. Теперь LSTM нуждается в предыдущем состоянии в качестве ввода, которое, как я понимаю, инициализируется нулем. Мой вопрос в том, является ли состояние сбрасывается до нуля после каждой последовательности? например, у меня есть последовательность 1, вектор состояния переносится вперед в этой последовательности, а затем я помещаю ее в ноль для следующей последовательности? Или переносится ли она в следующую последовательность 2? Если да, то как это делается для несвязанных последовательностей; например, у меня есть образцы из двух разных текстов, и было бы бессмысленно переносить состояние из текста 1 в текст 2; как это делается на практике? Что касается времени тестирования, то вектор состояния инициализируется как ноль и переносится для всей последовательности или сбрасывается после каждой подпоследовательности?Сброс состояния в LSTM во время обучения и тестирования

Примечание: Я помещаю этот тег также в Tensorflow, так как это каркас, который я использую, и, возможно, кто-то из меня может мне помочь.

ответ

0

В Tensorflow я на 95% уверен, что начальное состояние для каждой последовательности сбрасывается до нуля для каждого элемента вашей партии и между партиями. (5%, так как "Никогда не говори никогда" правило :)

EDIT:

я, вероятно, следует разработать более. Как работает Tensorflow, он сначала создает график, а затем передает ваши данные. Когда вы посмотрите на повторяющийся граф, который вы создали, я считаю, что вы увидите, что его голова (первое состояние) соединена с нулем, что означает каждый раз, когда вы нажимаете данные по графику (например, через sess.run()), это будет получить новый ноль от нулевого генератора, отсюда его старое состояние из предыдущих запусков, если забыли.

Смежные вопросы