Керас Регрессия к приближенной функции (цель: потеря < 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

0 ответов

Другие вопросы по тегам