Рекуррентные нейронные сети (RNN) с входами различной длины
У меня ввод текста разной длины, от нескольких символов до ста слов, поэтому я решил использовать разные MAX_LENGTH для каждого пакета вместо исправления MAX_LENGTH для всех пакетов (очевидно, короче MAX_LENGTH для меньшего текста).
После поиска в Google я увидел эту ветку на странице Keras github, которая дала следующее решение:
Последовательности должны быть сгруппированы по длине и сегментированы вручную на партии по этой длине перед отправкой в Keras.
Если я воспользуюсь этим трюком, я думаю, что нет способа перемешать данные во время тренировки, и это может привести к переобучению.
Я видел много разногласий в Kaggle, которые используют этот трюк. Я хочу знать, есть ли другое решение для этой проблемы?
1 ответ
Существует решение дополнить ваши данные фиктивным значением, чтобы все ваши входные последовательности имели одинаковую длину.
Предположим, у вас есть эти две последовательности:
- [1,2,3,1,2], вы сохраняете его как [1,2,3,1,2]
- [1,3,2,3], вы дополняете его нулями, пока он не достигнет желаемой длины: [1,3,2,3,0]
Затем вы начинаете свою модель с маскирующего слоя.
Это автоматически игнорирует дополнительную длину в сэмплах.