人工智能学习PyTorch教程之层和块

 更新时间:2021年11月25日 17:20:10   作者:LolitaAnn  
这篇文章主要为大家介绍了人工智能学习Pytorch教程中的层和块的相关知识点,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步

Python客栈送红包、纸质书

对于多层感知机而言,整个模型做的事情就是接收输入生成输出。但是并不是所有的多层神经网络都一样,所以为了实现复杂的神经网络就需要神经网络块,块可以描述单个层、由多个层组成的组件或整个模型本身。使用块进行抽象的一个好处是可以将一些块组合成更大的组件。

从编程的角度来看,块由类(class)表示。它的任何子类都必须定义一个将其输入转换为输出的正向传播函数,并且必须存储任何必需的参数。注意,有些块不需要任何参数。最后,为了计算梯度,块必须具有反向传播函数。幸运的是,在定义我们自己的块时,由于autograd 中引入)提供了一些后端实现,我们只需要考虑正向传播函数和必需的参数。

这一部分我们就要自定义自己的层和块。

先用实现一个简单的多层感知机:

1
2
3
4
5
6
7
8
import torch
from torch import nn
from torch.nn import functional as F
 
net = nn.Sequential(nn.Linear(20, 256), nn.ReLU(), nn.Linear(256, 10))
 
X = torch.rand(2, 20)
net(X)

这个多层感知机包含一个具有256个单元和ReLU激活函数的全连接的隐藏层,然后是一个具有10个隐藏单元且不带激活函数的全连接的输出层。

通过实例化nn.Sequential来构建我们的模型,层的执行顺序就是传入参数的顺序。

  • nn.Sequential定义了一种特殊的Module,即在PyTorch中表示一个块的类。它维护了一个由Module组成的有序列表(Linear类是Module的子类)。
  • 正向传播(forward)函数:将列表中的每个块连接在一起,将每个块的输出作为下一个块的输入。
  • 通过net(X)调用我们的模型来获得模型的输出。是net.__call__(X)的简写。(这一句先不管他有什么,继续往下看。)

我们也可以自己手写一个多层感知机:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class MLP(nn.Module):
    def __init__(self):
        # 调用`MLP`的父类的构造函数来执行必要的初始化。
        # 这样,在类实例化时也可以指定其他函数参数,例如模型参数`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)))
 
net = MLP()
net(X)

通过super().__init__()调用父类的__init__函数,省去了重复编写适用于大多数块的模版代码的痛苦。

实例化两个全连接层,分别为self.hidden和self.out。

除非我们实现一个新的运算符,否则我们不用担心反向传播函数或参数初始化,系统将自动生成这些。

前边说调用net() 就相当于调用net.__call__(X),因为我们在自己的MLP中写了forward,但是我们没有调用,只使用net() 他就自动执行forward了。就是因为会自动调用.__call__函数使forward执行。

说完后两条说第一条:

有序是怎么实现的,构建构一个简化的MySequential:

1
2
3
4
5
6
7
8
9
10
11
12
13
class MySequential(nn.Module):
    def __init__(self, *args):
        super().__init__()
        for block in args:
            # 这里,`block`是`Module`子类的一个实例。我们把它保存在'Module'类的成员变量
            # `_modules` 中。`block`的类型是OrderedDict。
            self._modules[block] = block
 
    def forward(self, X):
        # OrderedDict保证了按照成员添加的顺序遍历它们
        for block in self._modules.values():
            X = block(X)
        return X

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

1
2
net = MySequential(nn.Linear(20, 256), nn.ReLU(), nn.Linear(256, 10))
net(X)

用MySequential类实现的多层感知机和Sequential类实现的一样。

注意这里只是写出了其执行顺序,是简化版的Sequential类!

到此这篇关于人工智能学习PyTorch教程之层和块的文章就介绍到这了,更多相关PyTorch 层和块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

蓄力AI

微信公众号搜索 “ 脚本之家 ” ,选择关注

程序猿的那些事、送书等活动等着你

原文链接:https://blog.51cto.com/Lolitann/4682377

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!

相关文章

  • python opencv 实现读取、显示、写入图像的方法

    python opencv 实现读取、显示、写入图像的方法

    这篇文章主要介绍了python opencv 实现读取、显示、写入图像的方法,本文通示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • pandas使用之宽表变窄表的实现

    pandas使用之宽表变窄表的实现

    这篇文章主要介绍了pandas使用之宽表变窄表的实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • python识别文字(基于tesseract)代码实例

    python识别文字(基于tesseract)代码实例

    这篇文章主要介绍了python识别文字(基于tesseract)代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python的None和C++的NULL用法解读

    Python的None和C++的NULL用法解读

    这篇文章主要介绍了Python的None和C++的NULL用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Python实现多格式文本转为word

    Python实现多格式文本转为word

    在现代工作中,我们常常需要处理不同格式的文件,其中Word文档是最为常见的一种,本文主要介绍了如何使用Python创建一个全能的文件处理工具,能够将多种格式的文件转换为Word文档,需要的可以参考下
    2023-11-11
  • 利用PyQt中的QThread类实现多线程

    利用PyQt中的QThread类实现多线程

    本文主要给大家分享的是python实现多线程及线程间通信的简单方法,非常的实用,有需要的小伙伴可以参考下
    2020-02-02
  • 利用python numpy+matplotlib绘制股票k线图的方法

    利用python numpy+matplotlib绘制股票k线图的方法

    这篇文章主要介绍了利用python numpy+matplotlib绘制股票k线图的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • python3实现mysql导出excel的方法

    python3实现mysql导出excel的方法

    这篇文章主要介绍了python3实现mysql导出excel的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-07-07
  • Python生成词云的实现代码

    Python生成词云的实现代码

    这篇文章主要介绍了Python生成词云,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 详解python中eval函数的作用

    详解python中eval函数的作用

    在本篇文章里小编给大家整理的是关于python中eval函数作用以及实例代码,需要的朋友们参考下吧。
    2019-10-10

最新评论