1.数学含义
y = w * x
cost = 1/n ∑(y_pred - y)^2
grad = 2 * x * (x * w - y)
2.含义解释
线性回归反向传播
对cost函数求w导得出w的变化率,更新w求得最佳
3.代码实现
import math
# 数据
x_data = [1.0,2.0,3.0]
y_data = [2.0,4.0,6.0]
w = 1.999
#线性传播,计算y = w * x
def forword(x):
return x * w
#计算损失cost
def cost(xs,ys):
cost = 0
for x,y in zip(xs,ys):
y_pred = forword(x)
cost += math.pow(y_pred - y, 2)
return cost/len(xs)
# 计算梯度
def gradient(xs,ys):
grad = 0
for x, y in zip(xs, ys):
grad += 2 * x * (x * w - y)
return grad/len(xs)
#训练模型
for epoch in range(100):
cost_val = cost(x_data,y_data)
grad_val = gradient(x_data,y_data)
print('Epoch:' ,epoch,'w = ',w,'loss = ',cost_val)
4.结果展示
Epoch: 0 w = 1.999 loss = 4.666666666666527e-06
Epoch: 1 w = 1.999 loss = 4.666666666666527e-06
Epoch: 2 w = 1.999 loss = 4.666666666666527e-06
Epoch: 3 w = 1.999 loss = 4.666666666666527e-06
Epoch: 4 w = 1.999 loss = 4.666666666666527e-06
Epoch: 5 w = 1.999 loss = 4.666666666666527e-06
Epoch: 6 w = 1.999 loss = 4.666666666666527e-06
Epoch: 7 w = 1.999 loss = 4.666666666666527e-06
Epoch: 8 w = 1.999 loss = 4.666666666666527e-06
Epoch: 9 w = 1.999 loss = 4.666666666666527e-06
·····································
·····································
·····································
Epoch: 92 w = 1.999 loss = 4.666666666666527e-06
Epoch: 93 w = 1.999 loss = 4.666666666666527e-06
Epoch: 94 w = 1.999 loss = 4.666666666666527e-06
Epoch: 95 w = 1.999 loss = 4.666666666666527e-06
Epoch: 96 w = 1.999 loss = 4.666666666666527e-06
Epoch: 97 w = 1.999 loss = 4.666666666666527e-06
Epoch: 98 w = 1.999 loss = 4.666666666666527e-06
Epoch: 99 w = 1.999 loss = 4.666666666666527e-06