Используя библиотеку Keras на Python мы будем обучать нейронную сеть, аппроксимирующую функцию $f(x) = sin(x)+sin( \sqrt{2} x)$, которая представлена на рис. ниже.
# Разделить на обучающую и тестовую выборки.
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.25, random_state=13)
# Обучить с указанными параметрами.
model.compile(loss='mse', optimizer='rmsprop', metrics=['mae'])
model.fit(X_train, y_train, epochs=150, batch_size=10)
# Посчитать и вывести точность на обучающем и тестовом наборах данных.
_, accuracy = model.evaluate(X_train, y_train)
_, accuracy2 = model.evaluate(model.predict(X_test), y_test)
accuracy * 100.Знание о периодичности нашей функции (одни и те же значения повторяются через каждые $2\pi$ единиц $x$) позволяет увидеть, как можно облегчить нейронной сети жизнь.
То, что мы увидели периодичность и вручную выделили нужные переменные из исходной - это хорошо, но можно ли и эту часть обработки данных переложить на нейронную сеть?
Принимаются идеи улучшения, альтернативные решения, и объяснения, почему рассмотренное работает так, как оно работает.