【问题标题】:what is wrong with my linear regression neural network我的线性回归神经网络有什么问题
【发布时间】:2017-07-23 17:10:00
【问题描述】:
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。

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

【问题讨论】:

    标签: python neural-network linear-regression


    【解决方案1】:

    您没有将学习率(参见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  ]])
    

    【讨论】:

    • 嗨 Miriam,再次感谢您。你是最棒的!
    • 谢谢,乐于助人:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 2019-01-27
    • 2021-01-31
    • 2014-02-19
    • 2014-01-15
    • 1970-01-01
    • 2018-12-28
    相关资源
    最近更新 更多