我目前正在使用sklearn.neural_network.MPLRegressor,但在神经网络的定义中寻求更多灵活性时,我尝试了Keras。 我创建以下数据集
import numpy as np
x = np.linspace(-0.5,5,2000)
y = np.tanh(x)
y=y.reshape(-1, )
x=x.reshape(-1, 1)
并使用sklearn实现平凡的神经网络
from sklearn.neural_network import MLPRegressor
model = MLPRegressor(hidden_layer_sizes=(1,),activation='tanh',solver='lbfgs',verbose=True,validation_fraction = 0.1)
model.fit(x,y)
以高精度MSE 7.252229995056021e-10
我用Keras复制相同的nn
from keras.layers import Input, Dense
from keras.models import Model
import keras
from keras.wrappers.scikit_learn import KerasRegressor
keras.initializers.RandomUniform()
visible = Input(shape=(1,))
hidden1 = Dense(1, activation='tanh')(visible)
output = Dense(1,activation="linear")(hidden1)
model = Model(inputs=visible, outputs=output)
model.compile(optimizer='adam',metrics=['mean_squared_error'],loss =['mean_squared_error'] )
model.fit(x, y,validation_split=0.1)
但是我得到了MSE 0.02130996414874087
(使用不同的优化程序后,结果不会有太大变化)。
由于nn可以解析求解,所以我期望更高的精度。 有人知道这种差异的原因(如果有的话)(除了其他优化程序之外)?
谢谢!