电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
创作
电子发烧友网>电子资料下载>电子资料>PyTorch教程3.5之线性回归的简洁实现

PyTorch教程3.5之线性回归的简洁实现

2023-06-05 | pdf | 0.22 MB | 次下载 | 免费

资料介绍

在过去的十年中,深度学习见证了某种形式的寒武纪大爆发。技术、应用和算法的绝对数量远远超过了前几十年的进步。这是由于多种因素的偶然组合,其中之一是许多开源深度学习框架提供的强大的免费工具。Theano Bergstra等人,2010 年、DistBelief Dean等人,2012 年和 Caffe Jia等人,2014 年可以说代表了被广泛采用的第一代此类模型。与 SN2 (Simulateur Neuristique) 等早期(开创性)作品相比 Bottou 和 Le Cun,1988,它提供了类似 Lisp 的编程体验,现代框架提供了自动微分和 Python 的便利性。这些框架使我们能够自动化和模块化实现基于梯度的学习算法的重复性工作。

3.4 节中,我们仅依靠 (i) 张量进行数据存储和线性代数;(ii) 计算梯度的自动微分。在实践中,由于数据迭代器、损失函数、优化器和神经网络层非常普遍,现代图书馆也为我们实现了这些组件。在本节中,我们将向您展示如何 使用深度学习框架的高级 API 简洁地实现3.4 节中的线性回归模型。

import numpy as np
import torch
from torch import nn
from d2l import torch as d2l
from mxnet import autograd, gluon, init, np, npx
from mxnet.gluon import nn
from d2l import mxnet as d2l

npx.set_np()
import jax
import optax
from flax import linen as nn
from jax import numpy as jnp
from d2l import jax as d2l
No GPU/TPU found, falling back to CPU. (Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)
import numpy as np
import tensorflow as tf
from d2l import tensorflow as d2l

3.5.1. 定义模型

当我们在第 3.4 节中从头开始实现线性回归时 ,我们明确定义了我们的模型参数并编写了计算代码以使用基本线性代数运算生成输出。应该知道如何做到这一点。但是一旦您的模型变得更加复杂,并且一旦您几乎每天都必须这样做,您就会很高兴获得帮助。这种情况类似于从头开始编写自己的博客。做一两次是有益和有益的,但如果你花一个月重新发明轮子,你将成为一个糟糕的 Web 开发人员。

对于标准操作,我们可以使用框架的预定义层,这使我们能够专注于用于构建模型的层,而不用担心它们的实现。回想一下图 3.1.2中描述的单层网络的架构该层称为全连接层,因为它的每个输入都通过矩阵向量乘法连接到它的每个输出。

在 PyTorch 中,全连接层定义在LinearLazyLinear(自版本 1.8.0 起可用)类中。后者允许用户指定输出维度,而前者额外询问有多少输入进入该层。指定输入形状很不方便,这可能需要大量的计算(例如在卷积层中)。因此,为简单起见,我们将尽可能使用此类“惰性”层。

class LinearRegression(d2l.Module): #@save
  """The linear regression model implemented with high-level APIs."""
  def __init__(self, lr):
    super().__init__()
    self.save_hyperparameters()
    self.net = nn.LazyLinear(1)
    self.net.weight.data.normal_(0, 0.01)
    self.net.bias.data.fill_(0)

In Gluon, the fully connected layer is defined in the Dense class. Since we only want to generate a single scalar output, we set that number to 1. It is worth noting that, for convenience, Gluon does not require us to specify the input shape for each layer. Hence we do not need to tell Gluon how many inputs go into this linear layer. When we first pass data through our model, e.g., when we execute net(X) later, Gluon will automatically infer the number of inputs to each layer and thus instantiate the correct model. We will describe how this works in more detail later.

class LinearRegression(d2l.Module): #@save
  """The linear regression model implemented with high-level APIs."""
  def __init__(self, lr):
    super().__init__()
    self.save_hyperparameters()
    self.net = nn.Dense(1)
    self.net.initialize(init.Normal(sigma=0.01))
class LinearRegression(d2l.Module): #@save
  """The linear regression model implemented with high-level APIs."""
  lr: float

  def setup(self):
    self.net = nn.Dense(1, kernel_init=nn.initializers.normal(0.01))

In Keras, the fully connected layer is defined in the Dense class. Since we only want to generate a single scalar output, we set that number to 1. It is worth noting that, for convenience, Keras does not require us to specify the input shape for each layer. We do not need to tell Keras how many inputs go into this linear layer. When we first try to pass data through our model, e.g., when we execute net(X) later, Keras will automatically infer the number of inputs to each layer. We will describe how this works in more detail later.

class LinearRegression(d2l.Module): #@save
  """The linear regression model implemented with high-level APIs."""
  def __init__(self, lr):
    super().__init__()
    self.save_hyperparameters()
    initializer = tf.initializers.RandomNormal(stddev=0.01)
    self.net = tf.keras.layers.Dense(1, kernel_initializer=initializer)

forward方法中,我们只调用预定义层的内置__call__ 方法来计算输出。

@d2l.add_to_class(LinearRegression) #@save
def forward(self, X):
  return self.net(X)
@d2l.add_to_class(LinearRegression) #@save
def forward(self, X):
  return self.net(X)
@d2l.add_to_class(LinearRegression) #@save
def forward(self, X):
  return self.net(X)
@d2l.add_to_class(LinearRegression) #@save
def forward(self, X):
  return self.net(X)

3.5.2. 定义损失函数

该类MSELoss计算均方误差(没有 1/2(3.1.5)中的因素)。默认情况下,MSELoss 返回示例的平均损失。它比我们自己实现更快(也更容易使用)。

@d2l.add_to_class(LinearRegression) #@save
def loss(self, y_hat, y):
  fn = nn.MSELoss()
  return fn(y_hat, y)

The loss module defines many useful loss functions. For speed and convenience, we forgo implementing our own and choose the built-in loss.L2Loss instead. Because the loss that it returns is the squared error for each example, we use meanto average the loss across over the minibatch.

@d2l.add_to_class(LinearRegression) #@save
def loss(self, y_hat, y):
  fn = gluon.loss.L2Loss()
  return fn(y_hat, y).mean()
@d2l.add_to_class(LinearRegression) #@save
def loss(self, params, X, y, state):
  y_hat = state.apply_fn({'params': params}, *X)
  return optax.l2_loss(y_hat, y).mean()

The MeanSquaredError class computes the mean squared error (without the 1/2 factor in (3.1.5)). By default, it returns the average loss over examples.

@d2l.add_to_class(LinearRegression) #@save
def loss(self, y_hat, y):
  fn = tf.keras.losses.MeanSquaredError()
  return fn(y, y_hat)

3.5.3. 定义优化算法

Minibatch SGD 是用于优化神经网络的标准工具,因此 PyTorch 支持它以及模块中该算法的许多变体optim当我们实例化一个SGD实例时,我们指定要优化的参数,可通过 和我们的优化算法所需的self.parameters()学习率 ( ) 从我们的模型中获得。self.lr


下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1山景DSP芯片AP8248A2数据手册
  2. 1.06 MB  |  532次下载  |  免费
  3. 2RK3399完整板原理图(支持平板,盒子VR)
  4. 3.28 MB  |  339次下载  |  免费
  5. 3TC358743XBG评估板参考手册
  6. 1.36 MB  |  330次下载  |  免费
  7. 4DFM软件使用教程
  8. 0.84 MB  |  295次下载  |  免费
  9. 5元宇宙深度解析—未来的未来-风口还是泡沫
  10. 6.40 MB  |  227次下载  |  免费
  11. 6迪文DGUS开发指南
  12. 31.67 MB  |  194次下载  |  免费
  13. 7元宇宙底层硬件系列报告
  14. 13.42 MB  |  182次下载  |  免费
  15. 8FP5207XR-G1中文应用手册
  16. 1.09 MB  |  178次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成威廉希尔官方网站 应用800例(新编版)
  4. 0.00 MB  |  33566次下载  |  免费
  5. 3接口威廉希尔官方网站 图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字威廉希尔官方网站 基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动威廉希尔官方网站 设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537798次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420027次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6威廉希尔官方网站 仿真软件multisim 10.0免费下载
  12. 340992  |  191187次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183279次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费