deep learning linear regression demo1

本文介绍了如何使用Python库如numpy和torch实现数据迭代、定义线性回归模型、计算SGD损失函数以及进行优化过程中的梯度更新。作者通过实例展示了如何在一个简单的线性回归问题中应用这些技术。
部署运行你感兴趣的模型镜像
import numpy as np
import torch
import random


def data_iter(features:torch.tensor, labels, batch_size):
    indies = len(labels)
    if len(features) == indies:
        indies_ = list(range(indies))
        # print('indies_ 1', indies_)
        random.shuffle(indies_)
        # print('indies_ 2', indies_)
        for i in range(0, indies, batch_size):
            j = torch.tensor(indies_[i: min(i+batch_size, indies)])
            # print('j:', j)
            yield features.index_select(0, j), labels.index_select(0, j)


def linereg(x, w, b):
    return torch.mm(x, w) + b


def sgd_loss(y_hat, y):
    return (y_hat - y.view(y_hat.size())) ** 2/2
    # return (y_hat.view(y.size()) - y) ** 2/2


def optimization(params, lr, batch_size):
    for param in params:
        param.data -= lr * param.grad/batch_size


def test():
    num_features = 2
    num_data = 1000
    init_w = [2, -3.4]
    init_b = 3

    features = torch.normal(0, 1, (num_data, num_features))
    labels = features[:, 0] * init_w[0] + features[:, 1]*init_w[1] + init_b
    e = torch.normal(0, 0.01, size=labels.size())
    print(features.size())
    print(labels.size())
    labels += e
    batch_size = 10

    for x, y in data_iter(features, labels, batch_size):
        print('x:', x)
        print('y:', y)
        break

    epoch = 4
    lr = 0.01
    model = linereg
    loss_fun = sgd_loss
    w = torch.normal(0, 1, [num_features, 1], requires_grad=True)
    b = torch.ones(1, requires_grad=True)
    for i in range(epoch):
        for x, y in data_iter(features, labels, batch_size):
            y_hat = model(x, w, b)
            loss = loss_fun(y_hat, y).sum()
            print('epoch:', i, 'loss:', loss.item())
            loss.backward()
            optimization([w, b], lr, batch_size)
            # print(w.grad.data.size())
            # print(type(w.grad.data))
            # break
            w.grad.data.zero_()
            b.grad.data.zero_()


if __name__ == '__main__':
    test()

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

### 深度学习回归模型概述 深度学习中的回归任务旨在预测连续值输出。这类模型广泛应用于金融预测、医疗诊断等领域[^1]。 对于希望深入了解并实践深度学习回归模型的学习者而言,《Deep Learning: Methods and Applications》提供了详尽理论基础与应用实例说明,涵盖了从基本概念到高级技巧的内容。 labml.ai 提供了一系列高质量的深度学习论文实现项目,其中包括多个关于回归分析的具体案例研究和代码示例[^2]。 下面是一个简单的基于PyTorch框架构建线性回归模型的例子: ```python import torch from torch import nn, optim class LinearRegressionModel(nn.Module): def __init__(self, input_dim=1, output_dim=1): super(LinearRegressionModel, self).__init__() self.linear = nn.Linear(input_dim, output_dim) def forward(self, x): out = self.linear(x) return out model = LinearRegressionModel() criterion = nn.MSELoss() # 使用均方误差作为损失函数 optimizer = optim.SGD(model.parameters(), lr=0.01) # 随机梯度下降优化器 # 假设我们有一些训练数据 (X_train, y_train),这里省略具体的数据准备过程 for epoch in range(num_epochs): # num_epochs 是迭代次数 model.train() outputs = model(X_train.float()) loss = criterion(outputs, y_train.view(-1, 1).float()) optimizer.zero_grad() loss.backward() optimizer.step() print('完成训练') ``` 此段代码展示了如何定义一个简单的线性回归神经网络,并通过反向传播算法调整权重来最小化预测值与实际目标之间的差距。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值