pytorch __init__、forward与__call__的用法小结


Posted in Python onFebruary 27, 2021

1.介绍

当我们使用pytorch来构建网络框架的时候,也会遇到和tensorflow(tensorflow __init__、build 和call小结)类似的情况,即经常会遇到__init__、forward和call这三个互相搭配着使用,那么它们的主要区别又在哪里呢?

1)__init__主要用来做参数初始化用,比如我们要初始化卷积的一些参数,就可以放到这里面,这点和tf里面的用法是一样的

2)forward是表示一个前向传播,构建网络层的先后运算步骤

3)__call__的功能其实和forward类似,所以很多时候,我们构建网络的时候,可以用__call__替代forward函数,但它们两个的区别又在哪里呢?

当网络构建完之后,调__call__的时候,会去先调forward,即__call__其实是包了一层forward,所以会导致两者的功能类似。

在pytorch在nn.Module中,实现了__call__方法,而在__call__方法中调用了forward函数:

https://github.com/pytorch/pytorch/blob/master/torch/nn/modules/module.py

pytorch __init__、forward与__call__的用法小结

2.代码

import torch
import torch.nn as nn
import torch.nn.functional as F
 
class Net(nn.Module):
 def __init__(self, in_channels, mid_channels, out_channels):
 super(Net, self).__init__()
 self.conv0 = torch.nn.Sequential(
 torch.nn.Conv2d(in_channels, mid_channels, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)),
 torch.nn.LeakyReLU())
 self.conv1 = torch.nn.Sequential(
 torch.nn.Conv2d(mid_channels, out_channels * 2, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)))
 
 def forward(self, x):
 x = self.conv0(x)
 x = self.conv1(x)
 return x
 
class Net(nn.Module):
 def __init__(self, in_channels, mid_channels, out_channels):
 super(Net, self).__init__()
 self.conv0 = torch.nn.Sequential(
 torch.nn.Conv2d(in_channels, mid_channels, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)),
 torch.nn.LeakyReLU())
 self.conv1 = torch.nn.Sequential(
 torch.nn.Conv2d(mid_channels, out_channels * 2, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)))
 
 def __call__(self, x):
 x = self.conv0(x)
 x = self.conv1(x)
 return x

补充:torch/nn目录结构以及__init__.py

torch/nn目录结构以及init.py

pytorch __init__、forward与__call__的用法小结

torch/nn目录结构

__init__.py:

from .modules import *
#nn.modules  导入modules目录下内容 定义容器modules
from .parameter import Parameter
#nn.Parameter 导入parameter.py  定义parameter
from .parallel import DataParallel
#导入parallel目录下data_parallel.py中的DataParallel类
from . import init
#nn.init   导入init.py   参数初始化
from . import utils
#nn.utils  导入utils目录下内容 官网api下nn.utils下api

对于backends, functional.py, _functions 需要在代码前重新Import

例如我们常用的

import torch.nn.functional as F 就是导入了functional.py

backends和_functions是functional.py实现各种函数时所用到的。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Python 相关文章推荐
Python实现的几个常用排序算法实例
Jun 16 Python
python实现的登录和操作开心网脚本分享
Jul 09 Python
Python实现的tab文件操作类分享
Nov 20 Python
如何处理Python3.4 使用pymssql 乱码问题
Jan 08 Python
Python使用自带的ConfigParser模块读写ini配置文件
Jun 26 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
Apr 18 Python
对python实时得到鼠标位置的示例讲解
Oct 14 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
Apr 06 Python
python原类、类的创建过程与方法详解
Jul 19 Python
django框架F&Q 聚合与分组操作示例
Dec 12 Python
python日期与时间戳的各种转换示例
Feb 12 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
Nov 22 Python
python 实现有道翻译功能
Feb 26 #Python
Python爬取酷狗MP3音频的步骤
Feb 26 #Python
python利用xpath爬取网上数据并存储到django模型中
Feb 26 #Python
用python 绘制茎叶图和复合饼图
Feb 26 #Python
python lambda的使用详解
Feb 26 #Python
python爬虫scrapy框架之增量式爬虫的示例代码
Feb 26 #Python
详解Python openpyxl库的基本应用
Feb 26 #Python
You might like
网页上facebook分享功能具体实现
2014/01/26 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
PHP快速排序算法实现的原理及代码详解
2019/04/03 PHP
php和nginx交互实例讲解
2019/09/24 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
javascript取消文本选定的实现代码
2010/11/14 Javascript
JS隐藏参数post传值实例
2013/04/18 Javascript
采用自执行的匿名函数解决for循环使用闭包的问题
2014/09/11 Javascript
jQuery不兼容input的change事件问题解决过程
2014/12/05 Javascript
12行javascript代码绘制一个八卦图
2015/04/02 Javascript
基于jQuery实现的向下滑动二级菜单效果代码
2015/08/31 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
2015/11/29 Javascript
JS选取DOM元素的简单方法
2016/07/08 Javascript
如何使用angularJs
2017/05/08 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
2017/09/11 Javascript
小程序多图列表实现性能优化的方法步骤
2019/05/28 Javascript
layui表单验证select下拉框实现验证的方法
2019/09/05 Javascript
JS面向对象编程基础篇(二) 封装操作实例详解
2020/03/03 Javascript
ES6扩展运算符和rest运算符用法实例分析
2020/05/23 Javascript
Vuex实现简单购物车
2021/01/10 Vue.js
python程序 创建多线程过程详解
2019/09/23 Python
在Python中等距取出一个数组其中n个数的实现方式
2019/11/27 Python
Numpy之reshape()使用详解
2019/12/26 Python
python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)
2020/04/07 Python
英国天然有机美容护肤品:Neal’s Yard Remedies
2018/05/05 全球购物
波兰最大的宠物用品网上商店:FERA.PL
2019/08/11 全球购物
Araks官网:纽约内衣品牌
2020/10/15 全球购物
2014年元旦联欢会活动策划方案
2014/02/16 职场文书
公司接待方案
2014/03/08 职场文书
酒店采购员岗位职责
2014/03/14 职场文书
技术比武方案
2014/05/19 职场文书
企业总经理助理岗位职责
2014/09/12 职场文书
2014年党建工作总结
2014/11/11 职场文书
党员干部廉洁自律承诺书
2015/04/28 职场文书
javascript Number 与 Math对象的介绍
2021/11/17 Javascript
AudioContext 实现音频可视化(web技术分享)
2022/02/24 Javascript