用Keras复制sklearn.neural_network.MPLRegressor

时间:2018-10-09 14:55:49

标签: python scikit-learn keras

我目前正在使用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可以解析求解,所以我期望更高的精度。 有人知道这种差异的原因(如果有的话)(除了其他优化程序之外)?

谢谢!

0 个答案:

没有答案