class ResidualAdd(nn.Module):def __init__(self, fn):super().__init__()#inherit fa class's init methodself.fn = fndef forward(self, x, **kwargs):res = xx = self.fn(x, **kwargs)x += resreturn x
#该类必须定义成员函数,不然在TransformerEncoderBlock调用父类的forward方法时会报错。class FeedForwardBlock(nn.Sequential):def __init__(self, emb_size: int, expansion: int = 4, drop_p: float = 0.):super().__init__(nn.Linear(emb_size, expansion * emb_size),nn.GELU(),nn.Dropout(drop_p),nn.Linear(expansion * emb_size, emb_size),)#这里 FeedForwardBlock类的父类为nn.Sequential,且通过super().__init__()显示调用了父类的初
#始化方法,因此继承了分类的属性和方法,因此在使用的时候,即使FeedForwardBlock没有显示定义方法函
#数,也可以调用父类的forward方法。class TransformerEncoderBlock(nn.Sequential):def __init__(self,emb_size: int = 768,drop_p: float = 0.,forward_expansion: int = 4,forward_drop_p: float = 0.,** kwargs):super().__init__(ResidualAdd(nn.Sequential(nn.LayerNorm(emb_size),MultiHeadAttention(emb_size, **kwargs),nn.Dropout(drop_p))),ResidualAdd(nn.Sequential(nn.LayerNorm(emb_size),FeedForwardBlock(emb_size, expansion=forward_expansion, drop_p=forward_drop_p),nn.Dropout(drop_p))))#这里稍显复杂,主要是ResidualAdd里的nn.Sequential具有迷惑性,这里的nn.Sequential与
#TransformerEncorderBlock的父类没有太多关联含义,这里在使用时,先初始化一个ResidualAdd对象,
#然后,由于这里TransformerEncorderBlock仍然显示调用了父类的初始化方法,因此,继承了父类的属性
#和方法,在使用的时候会调用nn.Squential里的forward方法。class Sequential(Module):def __init__(self, *args: Any):super(Sequential, self).__init__()if len(args) == 1 and isinstance(args[0], OrderedDict):for key, module in args[0].items():self.add_module(key, module)else:for idx, module in enumerate(args):self.add_module(str(idx), module)def forward(self, input):for module in self:input = module(input)return input#关于父类nn.Sequential主要部分的代码,我们可以看出,其初始化参数是实例化对象,因此每个实例化对象
#的类都须有forward函数,不然在input = module(input)时就会报错,这也是为什么ResidualAdd必
#须有forward的原因

参考:https://blog.csdn.net/ZEdwin/article/details/117296675
           让python类直接被调用_csldh的博客-CSDN博客_python直接调用类
           https://blog.csdn.net/a__int__/article/details/104600972

关于pytorch中super的一点思考,结合代码相关推荐

  1. PyTorch中Super( )函数是什么

    刚刚入门PyTorch,官方demo中有个函数叫super(),代码如下: class LeNet(nn.Module):def __init__(self):super(LeNet, self)._ ...

  2. 【深度学习理论】一文搞透pytorch中的tensor、autograd、反向传播和计算图

    转载:https://zhuanlan.zhihu.com/p/145353262 前言 本文的主要目标: 一遍搞懂反向传播的底层原理,以及其在深度学习框架pytorch中的实现机制.当然一遍搞不定两 ...

  3. pytorch中Parameter()介绍

    用法介绍  pytorch中的Parameter函数可以对某个张量进行参数化.它可以将不可训练的张量转化为可训练的参数类型,同时将转化后的张量绑定到模型可训练参数的列表中,当更新模型的参数时一并将其更 ...

  4. PyTorch中如何使用tensorboard可视化

    PyTorch中如何使用tensorboard可视化 调用代码: from logger

  5. mysql 手动写时间_关于数据库中如何存储时间的一点思考

    1.切记不要用字符串存储日期 我记得我在大学的时候就这样干过,而且现在很多对数据库不太了解的新手也会这样干,可见,这种存储日期的方式的优点还是有的,就是简单直白,容易上手. 但是,这是不正确的做法,主 ...

  6. 关于Pytorch中dim使用的一点记录

    pytorch的许多函数,例如torch.cat().torch.max().torch.mul()等,都包含了dim参数.关于dim这个函数,我想许多人跟我一样,一知半解,比较模糊,下面我就把自己关 ...

  7. WPF中显示CAD图形的一点思考

    文章目录 1.GIS图形的显示 2.CAD图形显示 3.思考 项目中使用WPF做了一个GIS图形和CAD详图的关联工具,为了让用户在关联的过程中能更准确的识别要关联的CAD图形和GIS图形,做了一个图 ...

  8. PyTorch中模型的可复现性

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:AI算法与图像处理 在深度学习模型的训练过程中,难免引入 ...

  9. 关于PyTorch中的register_forward_hook()函数未能执行其中hook函数的问题

    关于PyTorch中的register_forward_hook()函数未能执行其中hook函数的问题 Hook 是 PyTorch 中一个十分有用的特性.利用它,我们可以不必改变网络输入输出的结构, ...

最新文章

  1. 利好不断 分布式光伏迎黄金时代
  2. 解决Mac上adb: command not found问题
  3. mysql 数值类型 长度_mysql中的数据类型的长度
  4. layer调用父页面方法_Ruby for SketchUp之图层【Layer】
  5. 机器学习数学基础之极限
  6. SpringBoot常见面试题总结二
  7. 小波变换(matlab)-常见脚本函数
  8. 如何精确理解leader布置的任务
  9. 如何升级到 macOS Mojave
  10. c语言offset函数,offset偏移量 offset函数怎么用,详细一点…
  11. Window10 WSL2 Linux子系统文件目录路径
  12. 安防摄像头互联网直播方案LiveGBS设计文档
  13. 2020最新安卓版本是多少_元气骑士2020最新角色兑换码 IOS、安卓礼包码大全领取攻略...
  14. netstat 中state详解
  15. (原創) 白蘋驚魂記 (iPhone)
  16. java计算 月数_Java 计算开始年月到结束年月期间的年月数
  17. Java基础:宾馆管理系统(一)
  18. web前端期末大作业:JavaScript大作业——福五鼠动漫网页制作(6页)带轮播图效果 学生个人单页面网页作业 学生网页设计成品 静态HTML网页单页制作
  19. 夏斌:半年宏观调控思路的建议
  20. 51单片机驱动DS18B20温度传感器测量温度

热门文章

  1. Java Class Loader Retrospect
  2. 关于js优化和css优化
  3. C#操作项目配置文件
  4. 职高中专的模块化课程设计难点
  5. C# Winform 带优美外观的UserControl控件GroupBox
  6. [导入]用Javascript实现interface的类似功能
  7. 【python数据挖掘课程】二十一.朴素贝叶斯分类器详解及中文文本舆情分析
  8. 查看Hive SQL执行日志
  9. 马斯克表示担心人工智能可能会在5年内超越人类
  10. 124. Binary Tree Maximum Path Sum 二叉树中的最大路径和