1.基本用法

在pytorch中,使用torch.nn包来构建神经网络,我们定义的网络继承自nn.Module类。而一个nn.Module包含神经网络的各个层(放在__init__里面)和前向传播方式(放在forward里面),例如:

class Module(nn.Module):# 网络结构def __init__(self):super(Module, self).__init__()# ......# 前向传播def forward(self, x):# ......return x
#输入数据
data = .....
# 实例化网络
module = Module()
# 前向传播
module(data)
# 而不是使用下面的
# module.forward(data)

可以发现,我们在编写代码的时候并不会显式地去调用forward方法。原因在于:

module(data)

实际上就等价于

module.forward(data)

2.原理分析

首先明确为什么module是一个对象,却可以像一个方法一样传入data进行调用

module(data)

原理是python中的__call__语法。例如:

class Module():def __call__(self, data):        print('传入的参数为->', data)module = Module()
module(1)
输出为:传入的参数为-> 1

也就是说,在我们编写的模型所继承的nn.Module类中,其__call__方法内便包含了某种形式的对forward方法的调用,从而使得我们不需要显式地调用forward方法。
当然,以上是简化的理解,实际的过程应为:

调用module的call方法
module的call里面调用module的forward方法
forward里面如果碰到Module的子类,回到第1步,如果碰到的是Function的子类,继续往下
调用Function的call方法
Function的call方法调用了Function的forward方法
Function的forward返回值
module的forward返回值
在module的call进行forward_hook操作,然后返回值

【forward方法--深度学习】相关推荐

  1. 复杂场景下的复杂缺陷检测方法--深度学习算法综述

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|OpenCV学堂 一.背景知识 随着自动化技术的快速发展, ...

  2. 三维重建 几何方法 深度学习_Occupancy Networks:基于学习函数空间的三维重建表示方法...

    作者:Longway 来源:公众号@3D视觉工坊 概述 随着深度神经网络的到来,基于学习的三维重建方法逐渐变得流行.但是和图像不同的是,在3D中没有规范的表示,既能高效地进行计算,又能有效地存储,同时 ...

  3. 三维重建 几何方法 深度学习_基于深度学习的视觉三维重建研究总结

    三维重建意义 三维重建作为环境感知的关键技术之一,可用于自动驾驶.虚拟现实.运动目标监测.行为分析.安防监控和重点人群监护等.现在每个人都在研究识别,但识别只是计算机视觉的一部分.真正意义上的计算机视 ...

  4. 三维重建 几何方法 深度学习_基于深度学习的三维重建算法:MVSNet、RMVSNet、PointMVSNet、Cascade系列...

    欢迎关注微信公众号"3D视觉学习笔记",分享博士期间3D视觉学习收获 MVSNet:香港科技大学的权龙教授团队的MVSNet(2018年ECCV)开启了用深度做多视图三维重建的先河 ...

  5. 三维重建 几何方法 深度学习_三维重建算法综述|传统+深度学习方式

    作者:CJB Date:2020-2-21 来源:基于深度学习的三维重建算法综述 欢迎加入国内最大的3D视觉交流社区,1700+的领域从业者正在共同进步~ 00 前言 01 基于传统多视图几何的三维重 ...

  6. 三维重建 几何方法 深度学习_三维重建 3D reconstruction 有哪些实用算法?

    主要的深度学习系列算法有DBN, ConvNets, RNN等,基本上经典的深度学习算法都用过. 详细请看唐路路(研究方向 深度学习 3D重建)在专栏 机器学习&深度学习--学术水准的理解 总 ...

  7. 生成对抗网络-改进方法|深度学习(李宏毅)(二十四)

    视频地址: ①B站:https://www.bilibili.com/video/BV15W411i7uP?p=2 ②油管:https://www.youtube.com/watch?v=KSN4QY ...

  8. 计算机应用刷分方法,深度学习分类比赛刷分技巧

    AI开发平台ModelArts ModelArts是面向开发者的一站式AI开发平台,为机器学习与深度学习提供海量数据预处理及半自动化标注.大规模分布式Training.自动化模型生成,及端-边-云模型 ...

  9. 1.8 其他正则化方法-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 1.7 理解 Dropout 回到目录 1.9 归一化输入 其他正则化方法 (Other Regularization Methods) 除了 L2L2L2 正则化和随机失活 ...

最新文章

  1. 计算各种形钢的重量用什么软件_造价常用工具不会用,30个常用工程算量工具免费送,速来领取收藏...
  2. java面试题 并发_Java 并发面试题(一)
  3. linux spi屏驱动程序,65 linux spi设备驱动之spi LCD屏驱动
  4. vue移动端项目缓存问题实践
  5. 多线程下的生产者消费者(一个初始值为0的变量,两个线程一个加1一个减1,轮询5轮)
  6. 【今日CV 视觉论文速览】30 Nov 2018
  7. 无盘服务器 cpu占用,顺网科技网维大师程序占CPU资源多的解决过程
  8. Android 轻松实现仿淘宝地区选择
  9. harbor 多端口_总结—Harbor仓库部署和使用问题集锦
  10. maven项目动态替换配置中的值
  11. JShielder:一款自动化Linux服务器安全增强工具
  12. linux 去掉csv文件第一行,使用PowerShell删除文本文件的第一行
  13. C++MFC实现win10标准计算器
  14. linux用cat建文件,如何使用Linux cat命令
  15. 【CSP】201903-1 小中大
  16. AM437x——LED裸机
  17. 【Python】爬虫爬取各大网站新闻(一)
  18. Unity 瞄准镜实现
  19. git pull报错:Your configuration specifies to...from the remote, but no such ref was fetched
  20. 让IIS支持PHP (转载)

热门文章

  1. 解决TableLayoutPanel控件闪烁
  2. Processing——A Music Game for the Avengers
  3. C# 邮件的发送,抄送
  4. 关于layout_alignParentLeft、layout_alignLeft、layout_toLeftOf、layout_marginLeft的区别
  5. paddinglfet和marginleft区别
  6. 【Python基础】面向对象封装 案例(一)
  7. 猿创征文 | Linux运维工程师的10个日常使用工具分享
  8. java http url 401 unauthorized_java - 为什么我在Maven中收到“401 Unauthorized”错误?
  9. 四种形态图解_昆明市纪委市监委网站_四种形态_呈贡:图解2018年运用“四种形态”处置情况...
  10. Ecplise上启动tomcat测试Servlet练习和问题总结