gpt4 book ai didi

python - 我的线性回归神经网络出了什么问题

转载 作者:太空宇宙 更新时间:2023-11-03 14:59:05 26 4
gpt4 key购买 nike

import numpy as np

np.random.seed(0)
a = np.random.randint(1,100, size= 1000).reshape(1000,1)
b = np.random.randint(0,2, size=1000).reshape(1000,1)

y = np.where(b==0,a*2, a*3)

X = np.hstack((a,b))
y = y

from sklearn.preprocessing import StandardScaler

sx = StandardScaler()
X = sx.fit_transform(X)

sy = StandardScaler()
y = sy.fit_transform(y)

w0 = np.random.normal(size=(2,1), scale=0.1)

for i in range(100):
input_layer = X
output_layer = X.dot(w0)

error = y - output_layer
square_error = np.sqrt(np.mean(error**2))

print(square_error)

w0+= input_layer.T.dot(error)

如果我理解正确的话,线性激活函数总是 f(x) = x。

如果你检查这段代码,你会发现平方误差越来越大,我不知道如何用神经网络解决这个简单的线性问题。我知道还有其他模型和库,但是我正在尝试这样做。

最佳答案

您没有将学习率(请参阅 here 和更正式的讨论 here )纳入您的模型中。当你训练网络时,你还需要选择一个学习率参数,它对你的损失是否会减少以及收敛的速度有很大影响。

通过设置

w0+= input_layer.T.dot(error)

您选择的学习率为 1,结果发现该值太大了。如果你设置了

w0+= 0.0005*input_layer.T.dot(error) 

(即选择学习率0.0005)损失会减少:

1.0017425183
0.521060951473
0.303777564629
0.21993949808
0.193933601196
0.18700323975
0.185262617455
0.184832603515
0.184726763539
.
.
.

但它不会收敛到 0,因为您的模型不是线性的。最终得到的权重w0

array([[ 0.92486712],
[ 0.318241 ]])

关于python - 我的线性回归神经网络出了什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45267778/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com