ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

人工智能实战 第2次作业 郑浩

2019-03-18 11:41:26  阅读:338  来源: 互联网

标签:实战 count %. 6f 人工智能 factor print delta 郑浩


项目 内容
这个作业属于哪个课程 人工智能实战 2019(北京航空航天大学)
这个作业的要求在哪里 第二次作业 - 双变量的反向传播
我在这个课程的目标是 了解人工智能的基础理论知识,锻炼实践能力
这个作业在哪个具体方面帮助我实现目标 学习神经网络的双变量反向传播,并通过代码实践来练习
作业正文 见下文
其他参考文献

1.作业要求

  • 根据课堂内容和示例代码完成双变量的反向传播代码
  • 给出相应的结果和误差
  • 给出自己的思考和比较

2.题目

\(x=2*w+3*b\)
\(y=2*b+1\)
\(z=x*y\)
给定\(w\)和\(b\)以及\(z\)的值,根据反向传播原理来更新\(w\),\(b\)的值,并前向计算\(z\)的值,不断循环,直到\(z\)与目标的误差在允许范围之内。

3.解题思路

见课堂课件内容

4.代码

在每次迭代中都重新计算\(delta b\),\(delta w\)的贡献值:

target_z=150.0
min=1e-5
w=3.0
b=4.0
x=2*w+3*b
y=2*b+1
z=x*y
delta_z=abs(z-target_z)
count=0
print("double variable new: w, b -----")
print("count=%d,w=%.6f,b=%.6f,z=%.6f,delta_z=%.6f"%(count,w,b,z,delta_z))
while((delta_z)>min):
    count+=1
    factor_b=2*x+3*y
    factor_w=2*y
    delta_b=((z-target_z)/(2*factor_b))
    delta_w=((z-target_z)/(2*factor_w))
    print("count=%d,factor_b=%.6f,factor_w=%.6f,delta_b=%.6f,delta_w=%.6f"%(count,factor_b,factor_w,delta_b,delta_w))
    w=w-delta_w
    b=b-delta_b
    x=2*w+3*b
    y=2*b+1
    z=x*y
    delta_z=abs(z-target_z)
    print("w=%.6f,b=%.6f,z=%.6f,delta_z=%.6f"%(w,b,z,delta_z))
print("done!")
print("final b=%.6f\nfinal w=%.6f"%(b,w))

运行结果及误差:

···
double variable new: w, b -----
count=0,w=3.000000,b=4.000000,z=162.000000,delta_z=12.000000
count=1,factor_b=63.000000,factor_w=18.000000,delta_b=0.095238,delta_w=0.333333
w=2.666667,b=3.904762,z=150.181406,delta_z=0.181406
count=2,factor_b=60.523810,factor_w=17.619048,delta_b=0.001499,delta_w=0.005148
w=2.661519,b=3.903263,z=150.000044,delta_z=0.000044
count=3,factor_b=60.485234,factor_w=17.613053,delta_b=0.000000,delta_w=0.000001
w=2.661517,b=3.903263,z=150.000000,delta_z=0.000000
done!
final b=3.903263
final w=2.661517
···

没有在每次迭代中都重新计算\(delta b\),\(delta w\)的贡献值:

···
target_z=150.0
min=1e-5
w=3.0
b=4.0
x=2w+3b
y=2b+1
z=x
y
delta_z=abs(z-target_z)
count=0
print("double variable: w, b -----")
print("count=%d,w=%.6f,b=%.6f,z=%.6f,delta_z=%.6f"%(count,w,b,z,delta_z))
factor_b=2x+3y
factor_w=2y
while((delta_z)>min):
count+=1
delta_b=((z-target_z)/(2
factor_b))
delta_w=((z-target_z)/(2factor_w))
print("count=%d,delta_b=%.6f,delta_w=%.6f"%(count,delta_b,delta_w))
w=w-delta_w
b=b-delta_b
x=2
w+3b
y=2
b+1
z=x*y
delta_z=abs(z-target_z)
print("w=%.6f,b=%.6f,z=%.6f,delta_z=%.6f"%(w,b,z,delta_z))
print("done!")
print("final b=%.6f\nfinal w=%.6f"%(b,w))

···

运行结果及误差:

···
double variable: w, b -----
count=0,w=3.000000,b=4.000000,z=162.000000,delta_z=12.000000
count=1,delta_b=0.095238,delta_w=0.333333
w=2.666667,b=3.904762,z=150.181406,delta_z=0.181406
count=2,delta_b=0.001440,delta_w=0.005039
w=2.661628,b=3.903322,z=150.005526,delta_z=0.005526
count=3,delta_b=0.000044,delta_w=0.000154
w=2.661474,b=3.903278,z=150.000170,delta_z=0.000170
count=4,delta_b=0.000001,delta_w=0.000005
w=2.661469,b=3.903277,z=150.000005,delta_z=0.000005
done!
final b=3.903277
final w=2.661469
···

4.思考和比较

可以看到,当每次迭代都重新计算\(delta b\),\(delta w\)的贡献值时,迭代次数明显比不重新计算\(delta b\),\(delta w\)的贡献值要少,收敛速度更快。但是,我们把误差按1:1分配到b和w上,未必是合理的。若我们按当地梯度来分配,或许能得到更快的下降速度。

标签:实战,count,%.,6f,人工智能,factor,print,delta,郑浩
来源: https://www.cnblogs.com/wresinski/p/10551196.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有