pytorch模拟线性回归

本文通过实例演示了如何使用PyTorch库进行基础的线性回归,并介绍了从数据预处理到模型训练的全过程。首先,通过随机生成数据展示SGD梯度下降的实现,随后转向使用深度学习模块构建一个简单的线性模型,对比两种方法的优劣。
摘要由CSDN通过智能技术生成
import torch
#模拟数据
x = torch.randn(200, 1)
y = x * 2 + 3
w = torch.randn(1)
b = torch.tensor([0.0])
lr = 0.01
global_step = 0
#SGD梯度下降
for epoch in range(3):
    for i in range(200):
    	#正向传播求loss
        y_pre = x[i] * w + b
        loss = (y_pre - y[i]).pow(2) / torch.tensor([2])
		
		#反向传播求梯度
        dw = (y_pre - y[i]) * x[i]
        db = y_pre - y[i]

		#更新权重
        w -= lr * dw
        b -= lr * db

        print("step = {}\tloss = {}\tw = {}\tb = {}".format(global_step, loss.item(), w.item(), b.item()))
        global_step += 1

在这里插入图片描述

import torch

x = torch.randn(200, 1, 1)
y = x * 2 + 3 + torch.randn(x.shape) * 0.01

class Liner(torch.nn.Module):
    def __init__(self):
        super(Liner, self).__init__()
        self.layer1 = torch.nn.Linear(1, 1)

    def forward(self, x):
        y_pre = self.layer1(x)
        return y_pre


liner = Liner()
global_step = 0
for epoch in range(5):
    for ind, i in enumerate(x):
        y_pre = liner(i)
        loss = ((y_pre - y[ind]) ** 2) / 2
        optimizer = torch.optim.SGD(params=liner.parameters(), lr=0.01)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        print("loss= {}\tstep= {}\t w = {}\tb = {}".format(loss.item(), global_step, liner.layer1.weight.item(), liner.layer1.bias.item()))
        global_step += 1



在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值