Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

第四章 《单变量线性回归》讨论区 #415

Open
xiaowuhu opened this issue Nov 20, 2019 · 9 comments
Open

第四章 《单变量线性回归》讨论区 #415

xiaowuhu opened this issue Nov 20, 2019 · 9 comments

Comments

@xiaowuhu
Copy link
Collaborator

No description provided.

@zerohope
Copy link

zerohope commented Mar 11, 2020

老师您好
4.3 神经网络法
把上述代码中的dw和db也改成私有属性
是否应为将 w与b改成私有属性
4.4 多样本单特征值计算
np.dot() 指的是否为向量点乘

@xiaowuhu
Copy link
Collaborator Author

老师您好
4.3 神经网络法
把上述代码中的dw和db也改成私有属性
是否应为将 w与b改成私有属性
4.4 多样本单特征值计算
np.dot() 指的是否为向量点乘

是的,都应该改成私有属性。
np.dot()是矩阵叉乘,不是点乘。矩阵点乘时,要求两个矩阵形状一样。

@zerokay
Copy link

zerokay commented Sep 15, 2020

4.0-单入单出单层
“另外一个原因是,在很多深度学习库的实现中,确实是把 $X$ 放在 $W$ 前面做矩阵运算的,同时 $W$ 的形状也是从左向右看,比如左侧有2个样本的3个特征输入($2\times 3$ 表示2个样本3个特征值),右侧是1个输出,则 $W$ 的形状就是 $3\times 1$。否则的话就需要倒着看,$W$ 的形状成为了 $1\times 3$,而 $X$ 变成了 $3\times 2$,很别扭。”“
中”右侧是一个输入出“应该改为”右侧是两个输出值“,W.B = ‘2-3 ’ . '3-1' = "2.1"。

@xiaowuhu
Copy link
Collaborator Author

fixed with some other words.

@jyluojames261915575
Copy link

请问,数据在哪里down

@pineappleoOilPrince
Copy link

老师您好,能帮我看看为什么为下面的想法是错误的呢?
以求一元线性拟合的单层神经元为例子,神经元的forward表达式为z=w*x+b,损失函数用均方差函数loss=pow(z-y,2)/2
我的思路是:

  1. 先根据梯度下降公式对损失函数与z的关系进行推导,这样就能算出为了梯度下降损失值,z要怎么去变化,也就是delta_z=-eta*(loss对z的偏导);
  2. 知道z要怎么变化也就是上一个神经元的输出要怎么变化,然后反向传播给神经元delta_z,让其根据delta_z来调整自己的权重值,也就是调整w和b。具体就是神经元根据自己的表达式对w和b的偏导(delta_z/delta_w=z对w的偏导、delta_z/delta_b=z对b的偏导)来算出delta|_w和delta_b的值,然后在更新w和b的值(w+=delta_w、b+=delta_b)
    之后我根据这个思路来写代码并用ch04.npz的数据来验证时结果却偏差很大,代码如下:
import matplotlib.pyplot as plt
class NeuralNet(object):
    def __init__(self):
        self.w = 0
        self.b = 0
        self.x=0
    def forward(self,x):
        self.x=x
        return self.x*self.w+self.b
    # def backward(self,z,y,eta):
    #     delta_w=-eta*(z-y)*self.x
    #     delta_b=-eta*(z-y)
    #     self.w+=delta_w
    #     self.b+=delta_b
    #     return delta_w,self.w,delta_b,self.b
    def backward(self,delta_z):
        delta_w=delta_z/self.x
        delta_b=delta_z
        self.w+=delta_w
        self.b+=delta_b
        return delta_w,self.w,delta_b,self.b
eta=0.1
def loss(z,y):
    return pow(z-y,2)/2
def get_delta_z(z,y):
    return -eta*(z-y)
file_name = "D://学习//人工智能//ai-edu-master//Data//ch04.npz"
from HelperClass.DataReader_1_0 import *
if __name__ == '__main__':
    reader = DataReader_1_0(file_name)
    reader.ReadData()
    X,Y = reader.GetWholeTrainSamples()
    net=NeuralNet()
    for i in range(reader.num_train):
         # get x and y value for one sample
        xi = X[i]
        yi = Y[i]
        zi=net.forward(xi)
        delta_z=get_delta_z(zi,yi)
        delta_w,w,delta_b,b=net.backward(delta_z)
        # delta_w,w,delta_b,b=net.backward(zi,yi,eta)
        print("x=",xi,"y=",yi,"z=",zi,"loss=",loss(zi,yi),"delta_z=",delta_z,"delta_w=",delta_w,"w=",w,"delta_b=",delta_b,"b=",b)
    # draw sample data
    plt.plot(X, Y, "b.")
    plt.title("Air Conditioner Power")
    plt.xlabel("Number of Servers(K)")
    plt.ylabel("Power of Air Conditioner(KW)")
    PX = np.linspace(0,1,10)
    PZ = net.forward(PX)
    plt.plot(PX, PZ, "r")
    plt.show()

训练之后的w(3096.04578468)和b(-1168.9221563)值都非常大
请问我是哪里出错了呢?

@JunHuaBai96
Copy link

老师您好,我有以下问题需要请教一下:
1.使用的梯度下降(参数使用的是源代码)发计算的结果和最小二乘法的结果相差比较大,结果如下:
image
2.我用pycharm调用原代码(未修改),其中ch04, Level3报错结果如下:
IndexError: too many indices for array: array is 1-dimensional, but 2 were indexed
同时,原代码运行时(未修改),ch04, Level7也遇到矩阵大小不一的问题,其中ch04, Level7报错结果如下:
RuntimeError: mat1 and mat2 shapes cannot be multiplied (1x32 and 1x1)
谢谢!

@jyluojames261915575
Copy link

jyluojames261915575 commented Oct 19, 2022 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants