我正在研究近似于函数f(X)= y的神经网络,其中X是[-inf,+ inf]中的向量[x0,...,xn]和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优化器,然后慢慢将学习速度从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 历元= 1E5
结果:1.e-7附近的损失