Pytorch实现线性回归
线性回归是机器学习入门知识,应用十分广泛。线性回归利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的,其表达形式为y=wx+b+e,e为误差服从均值为0的正态分布。首先让我们来确认线性回归的损失函数:
然后利用随机梯度下降法更新参数w和b来最小化损失函数,最终学得w和b的数值。
#numpy和pytorch实现线性回归
import torch as t
from matplotlib import pyplot as plt
from IPython import display
device = t.device('cpu')
#设置随机数种子
t.manual_seed(1000)
def get_fake_data(batch_size=8):
#产生随机数据:y=2x+3,加上一些噪声
x = t.rand(batch_size,1,device=device)*5 #x为0到5的随机样本
y = x*2+3+t.randn(batch_size,1,device=device)
return x,y
x,y = get_fake_data(batch_size=16)
plt.scatter(x.squeeze().cpu().numpy(), y.squeeze().cpu().numpy())
# 随机初始化参数
w = t.rand(1, 1).to(device)
b = t.zeros(1, 1).to(device)
lr =0.02 # 学习率
for ii in range(500):
x, y = get_fake_data(batch_size=4)
# forward:计算loss
y_pred = x.mm(w) + b.expand_as(y) # mm为矩阵相乘,expand_as扩展矩阵范围,将b(1,1)扩展为(4,1)
loss = 0.5 * (y_pred - y) ** 2 # 均方误差
loss = loss.mean()
# backward:手动计算梯度
dloss = 1
dy_pred = dloss * (y_pred - y)
dw = x.t().mm(dy_pred)
db = dy_pred.sum()
# 更新参数
w.sub_(lr * dw)
b.sub_(lr * db)
if ii%50 ==0:
# 画图
display.clear_output(wait=True)
x = t.arange(0, 6).view(-1, 1).float()# t.arange 输出结果为 LongTensor 所以需要转化为float 类型不然会报错
y = x.mm(w) + b.expand_as(x)
plt.plot(x.cpu().numpy(), y.cpu().numpy()) # predicted
x2, y2 = get_fake_data(batch_size=32)
plt.scatter(x2.numpy(), y2.numpy()) # true data
plt.xlim(0, 5)
plt.ylim(0, 13)
plt.show()
plt.pause(0.5)
print('w: ', w.item(), 'b: ', b.item())
利用Pytorch实现简单的神经网络上节以及写过了:
https://blog.csdn.net/weixin_43527195/article/details/98655618