Вариационные автоэнкодеры могут приближать значения в любом диапазоне. Проблема здесь заключается в архитектуре этой конкретной модели.
Декодер этого VAE использует в качестве последнего слоя keras.layers.LSTM.
Функция активации этого слоя по умолчанию - tanh, , а функция tanh выводит значения в диапазоне (-1,1). Вот почему модель не может генерировать значения за пределами этого диапазона.
Однако, если мы изменим функцию активации, скажем, на линейную, заменив
decoder_mean = LSTM(input_dim, return_sequences=True)
с
decoder_mean = LSTM(input_dim, return_sequences=True, activation=None)
VAE теперь может аппроксимировать данные. Это результат, который я получил после тренировки за 100 эпох.
![enter image description here](https://i.stack.imgur.com/CdpTv.png)
Общая рекомендация заключается в том, чтобы данные, которые вы пытаетесь аппроксимировать, находились в диапазоне функции, которую вы используете для аппроксимации, либо путем масштабирования данных, либо путем выбора более выразительной функции.