如何建立一个将两个数字相乘的神经网络

时间:2018-10-05 07:59:33

标签: python-3.x performance scikit-learn neural-network loss-function

我正在尝试建立一个将两个数字相乘的神经网络。为此,我接受了scikit-learn的帮助。我要一个具有2个隐藏层(5、3)和ReLU作为激活函数的神经网络。

我对MLPRegressor的定义如下:

X = data.drop('Product', axis=1)
y = data['Product']
X_train, X_test, y_train, y_test = train_test_split(X, y)
scaler = StandardScaler()
scaler.fit(X_train)

X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
mlp = MLPRegressor(hidden_layer_sizes=(5, 3), activation="relu", learning_rate="adaptive", max_iter=500000, verbose=True, validation_fraction=0.25)

在这里,data是包含3列,2个随机数和1个Product列的数据框。 问题是我得到的损失约为10 ^ 14。在这种情况下,如何减少这种损失,提高模型性能以及所有可能的更改可以帮助我?

3 个答案:

答案 0 :(得分:2)

我不是神经网络方面的专家。我会对输入进行对数变换,然后将它们输入网络,然后对输出进行指数化。只是一个想法。

答案 1 :(得分:0)

我相信仅具有两个隐藏层的NN不足以执行任意数字的乘法运算。请注意,N * M的乘积等于N的M倍加法。有些神经网络可以执行加法运算,但您必须考虑一般条件。此外,您必须决定如何定义网络的输入和输出:是要两个输入神经元和一个输出神经元,还是要两个乘数在网络中是二进制的(作为矢量)?我想如果您在两个输入神经元中输入十进制值,就必须对输入值进行标准化。

答案 2 :(得分:0)

有一种方法可以做到这一点。这是一个神经网络,它近似于乘法函数以将1000-10000范围内的数字相乘,如果数字范围受到限制,它可以很好地工作。这是gist link