pytorch手写线性回归
import torch
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
LEARN_RATE = 0.1
#1.准备数据
x = torch.randn([500,1])
y_true = x*0.8+3
#2.计算预测值 t_tred = x*w + b
w = torch.rand([],requires_grad=True)
b = torch.tensor(0.,requires_grad=True)
plt.figure()
plt.grid(True)
#开启交互模式
plt.ion()
for i in range(50):
plt.cla()
for j in [w,b]:
if j.grad is not None:
j.grad.zero_()
y_predict = x*w+b
#3.计算损失,把参数的梯度置为0,进行反向传播
loss = (y_predict-y_true).pow(2).mean()
loss.backward()
#4.更新参数,grad表示导数
w.data = w.data - LEARN_RATE*w.grad
b.data = b.data - LEARN_RATE*b.grad
plt.scatter(x.numpy(),y_true.numpy())
plt.plot(x.numpy(),y_predict.detach().numpy(),color="g")
plt.pause(0.1)
if i %50 ==0:
print( "第{}次,损失{},权重w={},偏执b={}".format(i,loss.data,w.data,b.data))
#关闭交互模式
plt.ioff()
plt.show()