赞
踩
目录
模型开始w是一个随机猜测,w=random value,
搜索的过程:就是要找一个w最适合数据集的w
目的:使得Σ(y^-y)²最小。
最直接的方法:将认为权重可能取值的区间w_list=[]表示出来,循环,每层循环求取一个loss(损失) loss最小的w最佳,例如
- w_list=[]
- mse_list=[]
- for w in np.arange(0.0,4.1,0.1):
- print('w=',w)
- loss_sum=0
- ......
当权重增多时,并不可取
通过 不断搜索w, 直到找到全局最小值(loss最小)所对应的w,但在此过程中有可能1)将局部最优解误成全局最优解。
2)当导数为0时,w不更新,陷入鞍点,无法迭代。(马鞍,每个轴有一个切面,一个切面w对应loss取最小值,但别的切面可能取最大值)
已知x、y求w和loss 此题称作cost,其中cost=(y_pred-y)**2
- x=[1.0,2.0,3.0]
- y=[2.0,4.0,6.0]
- w=1.0
- def forword(x):
- return x*w
- def cost(x,y):
- cost=0
- for i,j in zip(x,y):
- y_perd=forword(x)
- cost+=(y_perd-y)**2
- return cost/len(x)
- # 取cost平均值
- def gradient(x,y,w):
- grad=0
- for i,j in zip(x,y):
- grad+=2*i*(i*w-j)
- return grad/len(x)
- # grad也要取平均值
- print('predict before training',4,forword(4))
- for epoch in range(100):
- cost_val=cost(x,y)
- grad_val=gradient(x,y,w)
- w-=0.01*grad_val
- # 更新梯度
- print('epoch:',epoch,'w=',w,'loss=',cost_val)
- print('predict after training', 4, forword(4))
loss曲线是一直下降的,如果不是那么训练失败(先下降在上升也是失败的)
训练失败的原因:学习率太大
cost=(y_pred-y)**2=(x*w-y)**2 其中**2表示平方
已知x、y求w和loss 此题称作cost,其中cost=(y_pred-y)**2
- x=[1.0,2.0,3.0]
- y=[2.0,4.0,6.0]
- w=1.0
- # print('type(x)=',type(x))
- # # type(w)
- def forword(x):
- return x*w
- def loss(x,y):
- y_pred=forword(x)
- return (y_pred-y)**2
- def gradient(x,y,w):
- return 2*x*(x*w-y)
- print('predict before training',4,forword(4))
- for epoch in range(100):
- for xx,yy in zip(x,y):
- l=loss(x,y)
- grad=gradient(x,y)
- w=w-0.01*grad
- print('epoch:',epoch,'w=',w,'loss=',l)
- print('predict after training', 4, forword(4))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。