PyTorch(2)

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

发布了48 篇原创文章 · 获赞 0 · 访问量 1874

猜你喜欢

转载自blog.csdn.net/weixin_43527195/article/details/98952942