Python: 使用MLPRegressor拟合三维函数

我试图使用MLPRegressor来拟合一个预定义的三维函数。问题是我无法打印出正确的结果,因此当我绘制图表时,拟合效果看起来非常糟糕。

函数如下所示:

def threeDFunc(xin,yin):    z = np.zeros((40,40))    for xIndex in range(0,40,1):        for yIndex in range(0,40,1):            z[xIndex,yIndex]=(np.exp(-(xin[xIndex]**2+yin[yIndex]**2)/0.1))    return zxThD = np.arange(-1,1,0.05)yThD = np.arange(-1,1,0.05)zThD = threeDFunc(xThD, yThD)

3Dplot

上图是它应该近似的结果。

3Dplot with approximation

红色部分是实际拟合的结果。

代码如下:

classifier = neural_network.MLPRegressor(hidden_layer_sizes=(200, 200), activation='logistic', learning_rate='adaptive')xy = np.array((xThD.flatten(),yThD.flatten()))classifier.fit(np.transpose(xy), zThD)pre = classifier.predict(np.transpose(xy))import pylabfrom mpl_toolkits.mplot3d import Axes3Dfig = pylab.figure()ax = Axes3D(fig)X, Y = np.meshgrid(xThD, yThD)ax.plot_wireframe(X, Y, zThD)ax.plot_wireframe(X, Y, pre, color='red')print(np.shape(zThD))print(np.shape(pre))plt.show()

回答:

将激活函数改为双曲正切函数,使用activation='tanh',并将求解器改为lbfgs,使用solver='lbfgs'

如果你的分类器实例化如下所示,红色和蓝色的图表应该几乎相同:

classifier = neural_network.MLPRegressor(hidden_layer_sizes=(200, 200), solver='lbfgs', activation='tanh', learning_rate='adaptive')

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注