实验代码
w = 3
b = 4
delta_z = 12
i = 0
while abs( delta_z ) > 1e-5 :
i = i + 1
x = 2 * w + 3 * b
y = 2 * b + 1
z = x * y
delta_z = z - 150.0
factor_b = 3 * y + 2 * x
factor_w = 2 * y
delta_b = delta_z / ( 2 * factor_b )
delta_w = delta_z / ( 2 * factor_w )
b = b - delta_b
w = w - delta_w
print("w = %f\t b = %f\t z = %f\t" % (w, b, z))
print("delta_w = %f\t delta_b = %f\t delta_z = %f\t" % (delta_w, delta_b, delta_z))
print("factor_w = %f\t factor_b = %f\t" % (factor_b, factor_w))
print("---------------------------------------------------------------------------------------------")
print("result: 经过了%d次迭代,最终b = %f\tw = %f 此时精度为1e-5" % (i, b, w))
实验结果
每次迭代更新factor_b和factor_w的结果
w = 2.666667 b = 3.904762 z = 162.000000
delta_w = 0.333333 delta_b = 0.095238 delta_z = 12.000000
factor_w = 63.000000 factor_b = 18.000000
---------------------------------------------------------------------------------------------
w = 2.661519 b = 3.903263 z = 150.181406
delta_w = 0.005148 delta_b = 0.001499 delta_z = 0.181406
factor_w = 60.523810 factor_b = 17.619048
---------------------------------------------------------------------------------------------
w = 2.661517 b = 3.903263 z = 150.000044
delta_w = 0.000001 delta_b = 0.000000 delta_z = 0.000044
factor_w = 60.485234 factor_b = 17.613053
---------------------------------------------------------------------------------------------
w = 2.661517 b = 3.903263 z = 150.000000
delta_w = 0.000000 delta_b = 0.000000 delta_z = 0.000000
factor_w = 60.485224 factor_b = 17.613052
---------------------------------------------------------------------------------------------
result: 经过了4次迭代,最终b = 3.903263 w = 2.661517 此时精度为1e-5
每次迭代不更新factor_b和factor_w的结果
w = 2.666667 b = 3.904762 z = 162.000000
delta_w = 0.333333 delta_b = 0.095238 delta_z = 12.000000
factor_w = 63.000000 factor_b = 18.000000
---------------------------------------------------------------------------------------------
w = 2.661628 b = 3.903322 z = 150.181406
delta_w = 0.005039 delta_b = 0.001440 delta_z = 0.181406
factor_w = 63.000000 factor_b = 18.000000
---------------------------------------------------------------------------------------------
w = 2.661474 b = 3.903278 z = 150.005526
delta_w = 0.000154 delta_b = 0.000044 delta_z = 0.005526
factor_w = 63.000000 factor_b = 18.000000
---------------------------------------------------------------------------------------------
w = 2.661469 b = 3.903277 z = 150.000170
delta_w = 0.000005 delta_b = 0.000001 delta_z = 0.000170
factor_w = 63.000000 factor_b = 18.000000
---------------------------------------------------------------------------------------------
w = 2.661469 b = 3.903277 z = 150.000005
delta_w = 0.000000 delta_b = 0.000000 delta_z = 0.000005
factor_w = 63.000000 factor_b = 18.000000
---------------------------------------------------------------------------------------------
result: 经过了5次迭代,最终b = 3.903277 w = 2.661469 此时精度为1e-5
结果分析
- 每次更新factor_b和factor_w可有效减少所需的迭代次数,效率更高。
- 满足梯度下降的概念
- 最终得到结果是相同的