16 PyTorch 神经网络基础【李沐动手学深度学习v2】

这篇具有很好参考价值的文章主要介绍了16 PyTorch 神经网络基础【李沐动手学深度学习v2】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 模型构造

在构造自定义块之前,我们先回顾一下多层感知机的代码。 下面的代码生成一个网络,其中包含一个具有256个单元和ReLU激活函数的全连接隐藏层, 然后是一个具有10个隐藏单元且不带激活函数的全连接输出层。

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络

层和块

构造单层神经网咯:线性层+RELU+线性层

生成2x20(2是批量大小,20是批量维度)的随机矩阵

在这个例子中,我们通过实例化nn.Sequential来构建我们的模型, 层的执行顺序是作为参数传递的。 简而言之,nn.Sequential定义了一种特殊的Module, 即在PyTorch中表示一个块的类, 它维护了一个由Module组成的有序列表。 注意,两个全连接层都是Linear类的实例,Linear类本身就是Module的子类。 另外,到目前为止,我们一直在通过net(X)调用我们的模型来获得模型的输出。 这实际上是net.__call__(X)的简写。 这个前向传播函数非常简单: 它将列表中的每个块连接在一起,将每个块的输出作为下一个块的输入。

1.1 自定义

要想直观地了解块是如何工作的,最简单的方法就是自己实现一个。 在实现我们自定义块之前,我们简要总结一下每个块必须提供的基本功能。

  1. 将输入数据作为其前向传播函数的参数。

  2. 通过前向传播函数来生成输出。请注意,输出的形状可能与输入的形状不同。例如,我们上面模型中的第一个全连接的层接收一个20维的输入,但是返回一个维度为256的输出。

  3. 计算其输出关于输入的梯度,可通过其反向传播函数进行访问。通常这是自动发生的。

  4. 存储和访问前向传播计算所需的参数。

  5. 根据需要初始化模型参数

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络

自定义快

MLP是nn.Module的子类,所以nn.Module有两个函数

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络

实例化多层感知机的层

 
 

# 动手打一遍吧,加深一下印象嘞 class MLP(nn.Module): # 用模型参数声明层。这里,我们声明两个全连接的层 def __init__(self): # 调用MLP的父类Module的构造函数来执行必要的初始化。 # 这样,在类实例化时也可以指定其他函数参数,例如模型参数params(稍后将介绍) super().__init__() self.hidden = nn.Linear(20, 256) # 隐藏层 self.out = nn.Linear(256, 10) # 输出层 # 定义模型的前向传播,即如何根据输入X返回所需的模型输出 def forward(self, X): # 注意,这里我们使用ReLU的函数版本,其在nn.functional模块中定义。 return self.out(F.relu(self.hidden(X)))

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络

上述代码的解析

 
 

# 测试上述代码 net = MLP() net(X) # 块的一个主要优点是它的多功能性。 # 我们可以子类化块以创建层(如全连接层的类)、 整个模型(如上面的MLP类)或具有中等复杂度的各种组件。 # 我们在接下来的章节中充分利用了这种多功能性, 比如在处理卷积神经网络时。


1.2 顺序块

现在我们可以更仔细地看看Sequential类是如何工作的, 回想一下Sequential的设计是为了把其他模块串起来。 为了构建我们自己的简化的MySequential, 我们只需要定义两个关键函数:

  1. 一种将块逐个追加到列表中的函数;

  2. 一种前向传播函数,用于将输入按追加块的顺序传递给块组成的“链条”。

下面的MySequential类提供了与默认Sequential类相同的功能。

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络

顺序块

*args: lists of inputs of arguments

super( )._init_( ) 调用父类的初始化函数

self._modeules[block] : ordered dictionary. 放进去key. 【也就是说把传进去的每一层layer都按照顺序放在这个容器里,感觉相当于是数组的作用,只不过她存的是神经网络层】

 
 

class MySequential(nn.Module): def __init__(self, *args): super().__init__() for idx, module in enumerate(args): # 这里,module是Module子类的一个实例。我们把它保存在'Module'类的成员 # 变量_modules中。_module的类型是OrderedDict self._modules[str(idx)] = module def forward(self, X): # OrderedDict保证了按照成员添加的顺序遍历它们 for block in self._modules.values(): X = block(X) return X net = MySequential(nn.Linear(20, 256), nn.ReLU(), nn.Linear(256, 10)) net(X)

1.3 在前向传播函数中执行代码

Sequential类使模型构造变得简单, 允许我们组合新的架构,而不必定义自己的类。 然而,并不是所有的架构都是简单的顺序架构。 当需要更强的灵活性时,我们需要定义自己的块。 例如,我们可能希望在前向传播函数中执行Python的控制流。 此外,我们可能希望执行任意的数学运算, 而不是简单地依赖预定义的神经网络层。

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络

添加图片注释,不超过 140 字(可选)

 
 

class FixedHiddenMLP(nn.Module): def __init__(self): super().__init__() # 不计算梯度的随机权重参数。因此其在训练期间保持不变 self.rand_weight = torch.rand((20, 20), requires_grad=False) self.linear = nn.Linear(20, 20) def forward(self, X): X = self.linear(X) # 使用创建的常量参数以及relu和mm函数 X = F.relu(torch.mm(X, self.rand_weight) + 1) # 复用全连接层。这相当于两个全连接层共享参数 X = self.linear(X) # 控制流 while X.abs().sum() > 1: X /= 2 return X.sum() net = FixedHiddenMLP() net(X)

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络

添加图片注释,不超过 140 字(可选)

我们可以混合搭配各种组合块的方法。 在下面的例子中,我们以一些想到的方法嵌套块。

 
 

class NestMLP(nn.Module): def __init__(self): super().__init__() self.net = nn.Sequential(nn.Linear(20, 64), nn.ReLU(), nn.Linear(64, 32), nn.ReLU()) self.linear = nn.Linear(32, 16) def forward(self, X): return self.linear(self.net(X)) chimera = nn.Sequential(NestMLP(), nn.Linear(16, 20), FixedHiddenMLP()) chimera(X)

不是很能完全理解....先这样,学到后面应该这里会好一些,迷茫抛在这里啦


2. 参数管理

我们首先看一下具有单隐藏层的多层感知机。

 
 

import torch from torch import nn net = nn.Sequential(nn.Linear(4, 8), nn.ReLU(), nn.Linear(8, 1)) X = torch.rand(size=(2, 4)) net(X)

2.1 参数访问

 

print(net[2].state_dict())

输出的结果告诉我们一些重要的事情: 首先,这个全连接层包含两个参数,分别是该层的权重和偏置。 两者都存储为单精度浮点数(float32)。 注意,参数名称允许唯一标识每个参数,即使在包含数百个层的网络中也是如此。

net[2] 拿到的是nn.Linear(8, 1)

state_dict() 就是权重

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络

目标参数

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络

一次性访问所有参数

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络

添加图片注释,不超过 140 字(可选)

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络

添加图片注释,不超过 140 字(可选)

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络

添加图片注释,不超过 140 字(可选)

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络

添加图片注释,不超过 140 字(可选)

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络

添加图片注释,不超过 140 字(可选)

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络

添加图片注释,不超过 140 字(可选)

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络

添加图片注释,不超过 140 字(可选)

3. 自定义层

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络

添加图片注释,不超过 140 字(可选)

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络

添加图片注释,不超过 140 字(可选)

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络

添加图片注释,不超过 140 字(可选)

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络

添加图片注释,不超过 140 字(可选)

4. 读写文件

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络

添加图片注释,不超过 140 字(可选)

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络

添加图片注释,不超过 140 字(可选)

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络

添加图片注释,不超过 140 字(可选)

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络

16 PyTorch 神经网络基础【李沐动手学深度学习v2】,李沐深度学习,深度学习,pytorch,神经网络


看不懂的可以看看这本书的讲解:

http://www.feiguyunai.com/index.php/2019/09/11/pytorch-char03/

Pytorch神经网络工具箱

jupyter路径:pytorch/chapter_deep-learning-computation/model-construction.ipynb

https://github.com/Miraclelucy/dive-into-deep-learning 将李沐老师课堂中的jupyter notebook代码整理成了py格式的,欢迎关注,共同学习。文章来源地址https://www.toymoban.com/news/detail-838258.html

到了这里,关于16 PyTorch 神经网络基础【李沐动手学深度学习v2】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 24 深度卷积神经网络 AlexNet【李沐动手学深度学习v2课程笔记】(备注:含AlexNet和LeNet对比)

    目录 1. 深度学习机器学习的发展 1.1 核方法 1.2 几何学 1.3 特征工程 opencv 1.4  Hardware 2. AlexNet 3. 代码 2001 Learning with Kernels 核方法 (机器学习) 特征提取、选择核函数来计算相似性、凸优化问题、漂亮的定理 2000 Multiple View Geometry in computer vision 抽取特征、描述集合、(非)凸

    2024年03月12日
    浏览(80)
  • 动手学深度学习-pytorch版本(二):线性神经网络

    参考引用 动手学深度学习 神经网络的整个训练过程,包括: 定义简单的神经网络架构、数据处理、指定损失函数和如何训练模型 。经典统计学习技术中的 线性回归 和 softmax 回归 可以视为线性神经网络 1.1 线性回归 回归 (regression) 是能为一个或多个自变量与因变量之间关系建

    2024年02月12日
    浏览(52)
  • 深度神经网络基础——深度学习神经网络基础 & Tensorflow在深度学习的应用

    Tensorflow入门(1)——深度学习框架Tesnsflow入门 环境配置 认识Tensorflow 深度学习框架Tesnsflow 线程+队列+IO操作 文件读取案例 神经网络的种类: 基础神经网络:单层感知器,线性神经网络,BP神经网络,Hopfield神经网络等 进阶神经网络:玻尔兹曼机,受限玻尔兹曼机,递归神经

    2024年02月16日
    浏览(47)
  • 【深度学习】动手学深度学习(PyTorch版)李沐 2.4.3 梯度【公式推导】

      我们可以连接一个多元函数对其所有变量的偏导数,以得到该函数的 梯度 (gradient)向量。 具体而言,设函数 f : R n → R f:mathbb{R}^{n}tomathbb{R} f : R n → R 的输入是一个 n n n 维向量 x ⃗ = [ x 1 x 2 ⋅ ⋅ ⋅ x n ] vec x=begin{bmatrix} x_1\\\\x_2\\\\···\\\\x_nend{bmatrix} x = ​ x 1 ​ x 2 ​

    2024年01月17日
    浏览(55)
  • 【雕爷学编程】MicroPython动手做(10)——零基础学MaixPy之神经网络KPU

    早上百度搜“神经网络KPU”,查到与非网的一篇文章《一文读懂APU/BPU/CPU/DPU/EPU/FPU/GPU等处理器》,介绍各种处理器非常详细,关于“KPU”的内容如下: KPU Knowledge Processing Unit。 嘉楠耘智(canaan)号称 2017 年将发布自己的 AI 芯片 KPU。嘉楠耘智要在 KPU 单一芯片中集成人工神经

    2024年02月14日
    浏览(44)
  • 《动手学深度学习 Pytorch版》 9.4 双向循环神经网络

    之前的序列学习中假设的目标是在给定观测的情况下对下一个输出进行建模,然而也存在需要后文预测前文的情况。 数学推导太复杂了,略。 双向循环神经网络(bidirectional RNNs)添加了反向传递信息的隐藏层,以便更灵活地处理此类信息。 前向和反向隐状态的更新如下:

    2024年02月07日
    浏览(46)
  • 动手学深度学习(李沐)的pytorch版本(包含代码和PDF版本)

    目录 网址(特别适合自学) 说明: 代码与PDF版 传送门 界面一览:    github上一个项目将《动手学深度学习》从mxnet改为了pytorch实现。感谢大佬们的工作。    特别说明该电子版网页是通过docsify部署生成的,详细了解点击here,自己有很多文章或者想做电子版本文档的强推

    2024年02月13日
    浏览(46)
  • pytorch基础 神经网络构建

    www.ai-xlab.com AI MOOC Torch介绍 Torch是一个开源的机器学习的框架,早在2002年就发 布了Torch的初版,Torch的编程语言为C和Lua。如今 的Torch7依旧是热门的深度学习框架之一。 www.ai-xlab.com AI MOOC PyTorch介绍 PyTorch是在2017年1月由Facebook推出的。它是经 典机器学习库Torch框架的一个端口,

    2024年01月21日
    浏览(47)
  • 【雕爷学编程】MicroPython动手做(10)——零基础学MaixPy之神经网络KPU2

    KPU的基础架构 让我们回顾下经典神经网络的基础运算操作: 卷积(Convolution):1x1卷积,3x3卷积,5x5及更高的卷积 批归一化(Batch Normalization) 激活(Activate) 池化(Pooling) 矩阵运算(Matrix Calculate):矩阵乘,加 对于基础的神经网络结构,仅具备1,2,3,4 四种操作; 对于新型网

    2024年02月14日
    浏览(57)
  • 一篇文章搞定《动手学深度学习》-(李沐)PyTorch版本的所有内容

    目录 目录 简介 阅读指南 1. 深度学习简介 2. 预备知识 3. 深度学习基础 4. 深度学习计算 5. 卷积神经网络 6. 循环神经网络 7. 优化算法 8. 计算性能 9. 计算机视觉 10. 自然语言处理 环境 参考(大家可以在这里下载代码) 原书地址(大家可以在这里阅读电子版PDF内容) 引用 阅读

    2023年04月24日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包