Керас Регрессия к приближенной функции (цель: потеря < 1e-7)
Я работаю над нейронной сетью, которая приближает функцию f(X)=y с X вектором [x0, .., xn] и y в [-inf, +inf]. Эта приближенная функция должна иметь точность (сумму ошибок) около 1e-8. На самом деле, мне нужна моя нейронная сеть, чтобы переодеться.
X состоит из случайных точек в интервале -500 и 500. Перед помещением этих точек во входной слой я нормализовал их между [0, 1].
Я использую керас следующим образом:
dimension = 10 #example
self.model = Sequential()
self.model.add(Dense(128, input_shape=(dimension,), init='uniform', activation='relu'))
self.model.add(Dropout(.2))
self.model.add(Activation("linear"))
self.model.add(Dense(64, init='uniform', activation='relu'))
self.model.add(Activation("linear"))
self.model.add(Dense(64, init='uniform', activation='relu'))
self.model.add(Dense(1))
X_scaler = preprocessing.MinMaxScaler(feature_range=(0, 1))
y_scaler = preprocessing.MinMaxScaler(feature_range=(0, 1))
X_scaled = (X_scaler.fit_transform(train_dataset))
y_scaled = (y_scaler.fit_transform(train_labels))
self.model.compile(loss='mse', optimizer='adam')
self.model.fit(X_scaled, y_scaled, epochs=10000, batch_size=10, verbose=1)
Я пробовал другой NN, сначала [n] -> [2] -> [1] с функцией активации Relu, затем [n] -> [128] -> [64] -> [1]. Я попробовал SGB Optimizer и постепенно увеличиваю скорость обучения с 1e-9 до 0.1. Я также пытался без нормализации данных, но в этом случае потери очень высоки.
Моя лучшая потеря (MSE) - 0,037 при текущей настройке, но я далек от своей цели (1e-8).
Во-первых, я хотел бы знать, сделал ли я что-то не так. Я в хорошем смысле? Если нет, как я могу достичь своей цели?
Большое вам спасибо
Попробуйте №2
Я попробовал эту новую конфигурацию:
model = Sequential()
model.add(Dense(128, input_shape=(10,), init='uniform', activation='relu'))
model.add(Dropout(.2))
model.add(Dense(64, init='uniform', activation='relu'))
model.add(Dense(64, init='uniform', activation='relu'))
model.add(Dense(1, init='uniform', activation='sigmoid'))
На выборке из 50 элементов, batch_size в 10 и в течение 100000 эпох. Я получаю проигрыш в районе 1е-4.
Попробуйте № 3
model.add(Dense(128, input_shape=(10,), activation='tanh'))
model.add(Dense(64, activation='tanh'))
model.add(Dense(1, activation='sigmoid'))
batch_size = 1000 эпох =1e5
результат: потеря около 1.e-7