P3 梯度下降算法

269 阅读1分钟
import numpy as np  
import matplotlib.pyplot as plt  
 
 #导入数据
x_data = [1.0, 2.0, 3.0]  
y_data = [2.0, 4.0, 6.0]  
  
w = 1.0  

#定义模型、损失函数和梯度下降公式
def forward(x):  
    return w * x  
  
def cost(xs, ys):  
    cost = 0  
    for x, y in zip(xs, ys):  
    y_pred = forward(x)  
    cost += (y_pred - y) ** 2  
    return cost / len(xs)  
  
def gradient(xs, ys):  
    grad = 0  
    for x, y in zip(xs, ys):  
    grad += 2 * (x * w - y) * x  
    return grad / len(xs)  
  
epoch_list = []  
cost_list = []  

#进行训练
print('predict (before training)', 4, forward(4))  
for epoch in range(100):  
    cost_val = cost(x_data, y_data)  
    grad_val = gradient(x_data, y_data)  
    w -= 0.01 * grad_val  
    epoch_list.append(epoch)  
    cost_list.append(cost_val / 3)  
    print('epoch:', epoch, 'w=', w, 'loss=', cost_val)  
print('predict(after training)', 4, forward(4))  
  
#绘制损失图
plt.plot(epoch_list, cost_list)  
plt.ylabel('cost')  
plt.xlabel('epoch')  
plt.show()