我正在研究一个近似函数 f(X)=y 的神经网络,其中 X 是一个向量 [x0, .., xn] 和 [-inf, +inf] 中的 y。这个近似函数需要具有大约 1e-8 的精度(误差总和)。事实上,我需要我的神经网络过拟合。
X 由区间 -500 和 500 中的随机点组成。在将这些点放入输入层之前,我将它们归一化为 [0, 1]。
我使用 keras 如下:
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 个时期内。我在 1e-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 epochs=1e5
结果:损失 1.e-7 左右