机器学习&&深度学习——线性回归的简洁实现

这篇具有很好参考价值的文章主要介绍了机器学习&&深度学习——线性回归的简洁实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er
🌌上期文章:机器学习&&深度学习——线性回归的从零开始实现
📚订阅专栏:机器学习&&深度学习
希望文章对你们有所帮助

由于数据迭代器、损失函数、优化器以及神经网络很常用,现代深度学习库也为我们实现了这些组件。

生成数据集

import numpy as np
import torch
from torch.utils import data
from d2l import torch as d2l

true_w = torch.tensor([2, -3.4])
true_b = 4.2
# d2l.synthetic_data将会生成y=Xw+b,其中函数原理可以看上一章节
features, labels = d2l.synthetic_data(true_w, true_b, 1000)

读取数据集

可以调用框架中现有API来读取数据。我们将features和labels作为API的参数传递,并通过数据迭代器指定batch_size。此外,布尔值is_train表示是够希望数据迭代器对象在每个迭代周期内打乱数据。

def load_array(data_arrays, batch_size, is_train=True):  #@save
    """构造一个pytorch数据迭代器"""
    # 传入数据。其中*表示对list解开入参,也就是把列表元素分别当做参数传入
    dataset = data.TensorDataset(*data_arrays)
    # 随机从数据集中取出batch_size个数量的参数
    return data.TensorDataset(dataset, batch_size, shuffle=is_train)

# 读取数据集
batch_size = 10  # 小批量样本大小
data_iter = load_array((features, labels), batch_size)

如果我们要读取并打印第一个小批量样本,因为我们这边是使用了iter来构造了Python迭代器,因此用next来从迭代器中获取第一项:

print(next(iter(data_iter)))

结果:

[tensor([[-0.1996, 0.5686],
[ 0.6253, -0.1051],
[ 0.4497, -0.2051],
[ 0.3645, -0.4241],
[-2.6413, -0.4506],
[ 1.4606, 1.3924],
[-0.2853, -0.4866],
[ 1.0096, 0.5627],
[ 0.4851, -0.0612],
[ 0.5598, 1.4693]]), tensor([[1.8608],
[5.8130],
[5.8021],
[6.3728],
[0.4482],
[2.3855],
[5.2871],
[4.3162],
[5.3818],
[0.3218]])]

定义模型

对于标准深度学习模型,我们可以使用框架的预定好的层,我们只需要知道使用哪些层来构造模型,而不必关注层的实现细节。
我们首先定义一个模型变量net,这是一个Sequential(顺序)类的实例。Sequential类将多个层串联在一起。当给定输入数据时,Sequential实例将数据传入第一层,然后将第一层输出作为第二层的输入,一次类推。
这里的例子里面,模型只包含一个层,因此实际上不需要Sequential。
回归之前所说的单层网络架构,这一单层被称为全连接层,因为其每个输入都通过矩阵-向量乘法得到它的每个输出。
在PyTorch中,全连接层在Linear类中定义。 我们将两个参数传递到nn.Linear中。 第一个指定输入特征形状,即2,第二个指定输出特征形状,输出特征形状为单个标量,因此为1。

# nn是神经网络的缩写
from torch import nn

# 定义神经网络模型
net = nn.Sequential(nn.Linear(2, 1))

初始化模型参数

在这里,我们指定每个权重参数应该从均值为0、标准差为0.01的正态分布中随机采样, 偏置参数将初始化为零。
正如我们在构造nn.Linear时指定输入和输出尺寸一样, 现在我们能直接访问参数以设定它们的初始值。
我们通过net[0]选择网络中的第一个图层, 然后使用weight.data和bias.data方法访问参数。

# 初始化模型参数
net[0].weight.data.normal_(0, 0.01)  # 均值为0,标准差为0.01的正态分布
net[0].bias.data.fill_(0)  # 偏置参数设为0

定义损失函数

利用MSELoss来计算均方误差:

# 定义损失函数
loss = nn.MSELoss()

定义优化算法

小批量随机梯度下降算法是一种优化神经网络的工具,pytorch在optim模块中实现了改算法的多个变种。
当我们要实例化一个SGD实例时,需要指定优化的参数(可通过net.parameters()从我们的模型中获得)及优化算法所需要的超参数字典。而SCG只需要设置lr即可:

# 定义优化算法
trainer = torch.optim.SGD(net.parameters(), lr=0.03)

训练

在每个迭代周期,我们将完整遍历一次数据集,不停地从中获取一个小批量的输入和相应的标签。而后,对于每个小批量,都会进行以下步骤:
1、通过调用net(X)生成预测并计算损失l(前向传播)。
2、通过进行反向传播来计算梯度。
3、通过调用优化器来更新模型参数。

num_epochs = 3
for epoch in range(num_epochs):
    for X, y in data_iter:
        l = loss(net(X), y)  # 计算损失
        trainer.zero_grad()  # 梯度清零
        l.backward()  # 损失后向传播
        trainer.step()  # 更新网络参数
    l = loss(net(features), labels)
    print(f'epoch {epoch + 1}, loss {l:f}')

结果:文章来源地址https://www.toymoban.com/news/detail-613583.html

epoch 1, loss 0.000185
epoch 2, loss 0.000097
epoch 3, loss 0.000098

到了这里,关于机器学习&&深度学习——线性回归的简洁实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习&&深度学习——线性回归的基本元素

    回归用来表示输入输出之间的关系。 用实际例子来解释一下线性回归:根据房屋的面积、房龄来估算房屋价格。为了实现这个预测放假的模型,需要收集一个真实的数据集,该数据集包括了房屋的销售价格、面积和房龄。 在机器学习中,这个数据集称为 训练集(training set)

    2024年02月15日
    浏览(51)
  • 机器学习与深度学习——自定义函数进行线性回归模型

    目的与要求 1、通过自定义函数进行线性回归模型对boston数据集前两个维度的数据进行模型训练并画出SSE和Epoch曲线图,画出真实值和预测值的散点图,最后进行二维和三维度可视化展示数据区域。 2、通过自定义函数进行线性回归模型对boston数据集前四个维度的数据进行模型

    2024年02月13日
    浏览(43)
  • 人工智能|机器学习——循环神经网络的简洁实现

    循环神经网络的简洁实现 如何使用深度学习框架的高级API提供的函数更有效地实现相同的语言模型。 我们仍然从读取时光机器数据集开始。 定义模型 高级API提供了循环神经网络的实现。 我们构造一个具有256个隐藏单元的单隐藏层的循环神经网络层 rnn_layer 。 事实上,我们

    2024年02月04日
    浏览(64)
  • 机器学习&&深度学习——RNN的从零开始实现与简洁实现

    👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习深度学习——循环神经网络RNN 📚订阅专栏:机器学习深度学习 希望文章对你们有所帮助 我们将在之前所说的《时光机器》数据集上训练,先读取数据集: 回想一下,在train_iter中,每个词

    2024年02月13日
    浏览(43)
  • 深度学习之用PyTorch实现线性回归

    1.1 epoch = 100时 1.2 epoch = 1000时   2.1 Adam优化器    2.2 Adamax优化器  3.1 lr = 0.05  3.2 lr = 0.1(loss函数结果发散) 1.1 问题  1.2 解决办法 代码中model.parameters()函数保存的是Weights和Bais参数的值。但是对于其他网络(非线性)来说这个函数可以用吗,里面也是保存的w和b吗?

    2024年02月14日
    浏览(48)
  • d2l 线性回归的简洁实现

    上一节 张量:数据存储、线性代数;自动微分:计算梯度 开源框架,可自动化基于梯度的学习算法中重复性的工作 数据迭代器、损失函数、优化器、神经网络层 使用深度学习框架简洁实现 线性回归模型 生成数据集 标准深度学习模型,使用框架预定义好的层 关注用哪些层

    2024年02月14日
    浏览(45)
  • 《动手深度学习》 线性回归从零开始实现实例

    🎈 作者: Linux猿 🎈 简介: CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! 🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬 本文是《动手深度学习》线性回归从零开始实现实例的实现和分析。 实现代码

    2024年02月11日
    浏览(47)
  • 1、动手学深度学习——线性神经网络:线性回归的实现(从零实现+内置函数实现)

    回归(regression)是能为一个或多个自变量与因变量之间关系建模的一类方法。 在自然科学和社会科学领域, 回归经常用来表示输入和输出之间的关系 。 给定一个数据集,我们的目标是 寻找模型的权重和偏置 , 使得根据模型做出的预测大体符合数据里的真实价格。 输出的

    2024年02月11日
    浏览(51)
  • 33- PyTorch实现分类和线性回归 (PyTorch系列) (深度学习)

    知识要点  pytorch 最常见的创建模型 的方式, 子类 读取数据: data = pd.read_csv (\\\'./dataset/credit-a.csv\\\', header=None) 数据转换为tensor: X = torch .from_numpy(X.values).type(torch.FloatTensor) 创建简单模型: 定义损失函数: loss_fn = nn.BCELoss () 定义优化器: opt = torch.optim.SGD (model.parameters(), lr=0.00001) 把梯度

    2024年02月06日
    浏览(50)
  • python机器学习(五)逻辑回归、决策边界、代价函数、梯度下降法实现线性和非线性逻辑回归

    线性回归所解决的问题是把数据集的特征传入到模型中,预测一个值使得误差最小,预测值无限接近于真实值。比如把房子的其他特征传入到模型中,预测出房价, 房价是一系列连续的数值,线性回归解决的是有监督的学习。有很多场景预测出来的结果不一定是连续的,我们

    2024年02月15日
    浏览(88)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包