人工智能实战2019 第二次作业 续连元

项目 内容
这个作业属于哪个课程 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

二、一些思考:

一个显然的结论是,按双变量迭代比按单变量迭代能取得更好更快的效果,其中按误差均匀分配的原则就能够很快收敛到误差范围内。但是均分误差的思想本身似乎不见得很合理。。

posted @ 2019-03-18 10:39  L_yun  阅读(163)  评论(0编辑  收藏  举报