2019人工智能实战 第二次作业 段峙宇
双变量的反向传播计算
| 项目 | 内容 |
|---|---|
| 课程内容 | 2019人工智能实战 |
| 作业要求 | 第二次作业 |
| 课程目标 | 双变量反向传播计算 |
| 本次作业的帮助 | 学习反向传播代码的写法和一些思考 |
- 题目
$$
z = x * y
$$
$$x = 2w + 3b$$
$$y = 2b + 1$$
- 求解使$z$稳定在150的参数值
- 精度:0.00001
- 代码
def cal(w_last, b_last, delta_z):
b_last = float(b_last)
w_last = float(w_last)
delta_z = float(delta_z)
y = float(2 * b_last + 1)
x = float(2 * w_last + 3 * b_last)
delta_b = float(delta_z * 0.5 / (3 * y + 2 * x))
delta_w = float(delta_z * 0.5 / (2 * y))
return delta_b, delta_w,
if __name__ == "__main__":
list_z = [162.0]
list_w = [3]
list_b = [4]
i = 0
while(i<=6):
delta_z = float(list_z[i] - 150)
if (abs(delta_z <= 0.00001)):
break;
delta_b, delta_w = cal(list_w[i], list_b[i], delta_z)
list_w.append(list_w[i]-delta_w)
list_b.append(list_b[i]-delta_b)
i = i + 1
z = float((2 * list_w[i]+ 3 * list_b[i]) * (2 * list_b[i] + 1))
list_z.append(z)
print(list_z)
print(list_b)
print(list_w)
- 运行结果
[162.0, 150.18140589569163, 150.0000443352674, 150.00000000000267]
[4, 3.9047619047619047, 3.903263272264059, 3.9032629057674404]
[3, 2.6666666666666665, 2.661518661518661, 2.661517402927456]
故最终误差为$2.67*10^{-12}$
b的最终值为3.9032629057674404
w的最终值为2.661517402927456
- 问题与思考
- 不是很理解为什么要假设$$\Delta w和\Delta b对\Delta z$$的贡献量是一样的?
个人感觉应该按照每次偏导数的值转化权重,因为偏导数越大证明该变量对误差的贡献越多

浙公网安备 33010602011771号