Создав набор данных из 1000 выборок, используя ваш метод, я смог получить довольно хорошую модель автоэнкодера, используя Conv1d:
LEN_SEQ = 10
x = Input(shape=(n_in, 1), name="input")
h = Conv1D(filters=50, kernel_size=LEN_SEQ, activation="relu", padding='same', name='Conv1')(x)
h = MaxPooling1D(pool_size=2, name='Maxpool1')(h)
h = Conv1D(filters=150, kernel_size=LEN_SEQ, activation="relu", padding='same', name='Conv2')(h)
h = MaxPooling1D(pool_size=2, name="Maxpool2")(h)
y = Conv1D(filters=150, kernel_size=LEN_SEQ, activation="relu", padding='same', name='conv-decode1')(h)
y = UpSampling1D(size=2, name='upsampling1')(y)
y = Conv1D(filters=50, kernel_size=LEN_SEQ, activation="relu", padding='same', name='conv-decode2')(y)
y = UpSampling1D(size=2, name='upsampling2')(y)
y = Conv1D(filters=1, kernel_size=LEN_SEQ, activation="relu", padding='same', name='conv-decode3')(y)
AutoEncoder = Model(inputs=x, outputs=y, name='AutoEncoder')
AutoEncoder.compile(optimizer='adadelta', loss='mse')
AutoEncoder.fit(sequence, sequence, batch_size=32, epochs=50)
Вывод последней эпохи:
Epoch 50/50
1000/1000 [==============================] - 4s 4ms/step - loss: 0.0104
Тест нановые данные:
array([[[0.5557],
[0.8887],
[0.778 ],
[0. ],
[0.4443],
[1. ],
[0.3333],
[0.2222],
[0.1111],
[0.6665],
[...]
Прогнозы:
array([[[0.56822747],
[0.8906583 ],
[0.89267206],
[0. ],
[0.5023574 ],
[1.0665314 ],
[0.37099048],
[0.28558862],
[0.05782872],
[0.6886021 ],
[...]
Некоторые проблемы с округлением, но довольно близко!
Это то, что вы искали?