第二次作业:双变量的反向传播
2019-03-13 16:19 Jackxu121ux 阅读(415) 评论(0) 收藏 举报1.作业要求
- 根据课堂内容(线性反向传播)完成双变量的反向传播代码
- 给出相应的结果和误差
- 给出自己的比较和思考
| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | 人工智能实战 |
| 我在这个课程的目标是 | 将人工智能技术与本专业知识联系 |
| 这个作业在哪个具体方面帮助我实现目标 | 通过代码实现加深对梯度下降的反向传播理解 |
| 作业正文 | 链接 |
2.题目
\(x=2 * w+3 * b\)
\(y=2 * b+1\)
\(z=x * y\)
给定所有初始值\(z_{\text{target}}\)和目标\(z\)的值,根据反向传播原理来更新
\(w,b\)的值,直到\(z\)与目标\(z_{\text{target}}\)的误差在允许范围之内
3.代码
def calculate(w,b):
x=2*w+3*b
y=2*b+1
z=x*y
Dw=2*y # Z对w的偏导
Db=3*y+2*x # Z对b的偏导
return(x,y,z,Dw,Db)
def iteration(zt,w,b): #zt为z的目标值
x,y,z,Dw,Db=calculate(w,b)
deltaz=z-zt #deltaz为z的差值
print('当前b的值=',b)
print('当前w的值=',w)
print('当前的误差=',deltaz)
print('')
deltazw=deltaz/2 #deltazw为z的差值对w的作用量
deltazb=deltaz/2 #deltazb为z的差值对b的作用量
deltaw=-deltazw/Dw #deltaw为w的变化值
deltab=-deltazb/Db #deltab为b的变化值
w=w+deltaw
b=b+deltab
if deltaz>1e-5:
iteration(zt,w,b)
else:
return
#初始化
w=3.0
b=4.0
zt=150
iteration(zt,w,b)
4.运行结果
当前b的值= 4.0
当前w的值= 3.0
当前的误差= 12.0
当前b的值= 3.9047619047619047
当前w的值= 2.6666666666666665
当前的误差= 0.18140589569162557
当前b的值= 3.903263272264059
当前w的值= 2.661518661518661
当前的误差= 4.4335267403994294e-05
当前b的值= 3.9032629057674404
当前w的值= 2.661517402927456
当前的误差= 2.6716406864579767e-12
5.比较和思考
- 较单变量的反向传播,双变量的方式有效的提高了收敛速度;这个梯度下降的迭代方式与我之前的牛顿迭代法有类似的地方;不过这种算法拓展到了双变量的情况;更具有普遍性。
浙公网安备 33010602011771号