Я думаю, прежде всего, вам следует выбрать метрику для измерения производительности. Например, вы хотите использовать MAE или MSE? Или какой-то другой показатель, который вы решите, исходя из поставленной задачи. Например, вы можете допустить большую ошибку для «редких прыжков», но не для обычных случаев, или наоборот. Как только вы определились с метрикой ошибки, в идеале вы должны установить в качестве функции стоимости, что сеть LSTM будет минимизирована.
Теперь цель состоит в том, чтобы минимизировать заданную вами метрику ошибки. Если это была выпуклая проблема, масштабирование вывода не будет иметь значения. Но мы теперь, что это не так со сложными архитектурами глубокого обучения. Это означает, что при минимизации функции стоимости с градиентом приличия она может застрять в локальном минимуме с очень задержанной конвергенцией. В этом случае нормализация вывода может помочь. Как?
Предположим, что ваш выход имеет среднее значение 5. С параметрами последних слоев, инициализированными около нуля, и значением смещения, равным нулю (т. Е. Линейное преобразование relu), сети необходимо узнать, что смещение должнобыть около 5. В зависимости от сложности сети это может занять несколько эпох. Однако, если вы нормализуете данные или инициализируете смещение на 5, тогда ваша сеть начинает с хорошей оценки смещения и, следовательно, сходится быстрее.
Теперь вернемся к вашим вопросам:
Я бы, по крайней мере, сделал бы среднее значение на выходе и использовал бы Плотный слой с линейным выходом.
Архитектура, которая у вас есть, кажется хорошей, вы можете попробовать сложить 2-4 слоя LSTM, если считаете, что ваши входные данные имеют сложные временные зависимости.
Не стесняйтесь обновлять OP с помощью кода и производительности, которую вы получаете, и мы можем обсудить, что еще можно улучшить.