项目 | 内容 |
---|---|
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/buaa/BUAA-AI-2019 |
这个作业的要求在哪里 | https://edu.cnblogs.com/campus/buaa/BUAA-AI-2019/homework/2624 |
我在这个课程的目标是 | 学习了解人工智能在工程中的实际应用 |
这个作业在哪个具体方面帮助我实现目标 | 初步感受误差的反向传播算法 |
作业正文 | 如下 |
参考文献 | 无 |
正文
一、双变量反向传播的实现以及结果
- 代码实现(err_z均分的情形)
n=1
w=3
b=4
z=(2*w+3*b)*(2*b+1)
err_z=z-150
while err_z<=-0.0001 or err_z>=0.0001:
delt_w= err_z/2/(4*b+2)
delt_b = err_z /2/ (12 * b +4*w+ 3)
w=w-delt_w
b=b-delt_b
z = (2 * w + 3 * b) * (2 * b + 1)
err_z = z - 150
print('z=',z,'w=',w,'b=',b,'err_z=',err_z,'次数=',n)
n=n+1
if n>1000:
break
-运行结果
z= 150.18140589569163 w= 2.6666666666666665 b= 3.9047619047619047 err_z= 0.18140589569162557 次数= 1
z= 150.0000443352674 w= 2.661518661518661 b= 3.903263272264059 err_z= 4.4335267403994294e-05 次数= 2
-代码实现(尝试按偏导大小分配err_z情形)
n=1
w=3
b=4
z=(2*w+3*b)*(2*b+1)
zw=4*b+2
zb=12*b+4*w+3
err_z=z-150
while err_z<=-0.0001 or err_z>=0.0001:
delt_w= zb*err_z/(zb+zw)/zw
delt_b = zw*err_z/(zb+zw)/zb
w=w-delt_w
b=b-delt_b
z = (2 * w + 3 * b) * (2 * b + 1)
err_z = z - 150
print('z=',z,'w=',w,'b=',b,'err_z=',err_z,'次数=',n)
n=n+1
if n>1000:
break
-运行结果
z= 150.09854147420282 w= 2.4814814814814814 b= 3.9576719576719577 err_z= 0.09854147420281834 次数= 1
z= 150.0016250486849 w= 2.4772235165467915 b= 3.957324368697697 err_z= 0.001625048684900321 次数= 2
z= 150.00002691008805 w= 2.4771532983937403 b= 3.9573186366035706 err_z= 2.6910088053000436e-05 次数= 3
二、一些思考:
一个显然的结论是,按双变量迭代比按单变量迭代能取得更好更快的效果,其中按误差均匀分配的原则就能够很快收敛到误差范围内。但是均分误差的思想本身似乎不见得很合理。。