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使用rabbitmq实现网络爬虫示例
Feb 20 Python
Python写入CSV文件的方法
Jul 08 Python
用python写的一个wordpress的采集程序
Feb 27 Python
Python中的if、else、elif语句用法简明讲解
Mar 11 Python
Python中.py文件打包成exe可执行文件详解
Mar 22 Python
Python 逐行分割大txt文件的方法
Oct 10 Python
Python lambda函数基本用法实例分析
Mar 16 Python
pygame游戏之旅 载入小车图片、更新窗口
Nov 20 Python
python实现的分层随机抽样案例
Feb 25 Python
appium+python adb常用命令分享
Mar 06 Python
Django2.1.7 查询数据返回json格式的实现
Dec 29 Python
python中对列表的删除和添加方法详解
Feb 24 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
PHP 判断变量类型实现代码
2009/10/23 PHP
Symfony2框架学习笔记之表单用法详解
2016/03/18 PHP
golang、python、php、c++、c、java、Nodejs性能对比
2017/03/12 NodeJs
取得传值的函数
2006/10/27 Javascript
JQuery动态创建DOM、表单元素的实现代码
2011/08/09 Javascript
JavaScript的递归之递归与循环示例介绍
2013/08/05 Javascript
node.js中的buffer.write方法使用说明
2014/12/10 Javascript
javascript实现支持移动设备画廊
2015/08/24 Javascript
全面介绍javascript实用技巧及单竖杠
2016/07/18 Javascript
jQuery实现联动下拉列表查询框
2017/01/04 Javascript
JSON字符串和JSON对象相互转化实例详解
2017/01/05 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
ES6正则的扩展实例详解
2017/04/25 Javascript
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
vue实现点击隐藏与显示实例分享
2019/02/13 Javascript
jQuery实现每日秒杀商品倒计时功能
2019/09/06 jQuery
python中cPickle用法例子分享
2014/01/03 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
python中logging模块的一些简单用法的使用
2019/02/22 Python
numpy.linspace函数具体使用详解
2019/05/27 Python
Pytorch 实现权重初始化
2019/12/31 Python
python实现图片转字符画的完整代码
2021/02/21 Python
HTML5 播放 RTSP 视频的实例代码
2019/07/29 HTML / CSS
德国柯吉澳趣味家居:Koziol
2017/08/24 全球购物
Ariat英国官网:为世界顶级马术运动员制造最优质的鞋类和服装
2020/02/14 全球购物
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
英国户外服装、鞋类和设备的领先零售商:Millets
2020/10/12 全球购物
外科实习自我鉴定
2013/10/06 职场文书
2014年端午节活动方案
2014/03/11 职场文书
蟋蟀的住宅教学反思
2014/04/26 职场文书
运动会加油稿100字
2014/09/19 职场文书
支行行长竞聘报告
2014/11/06 职场文书
话题作文之诚信
2019/11/28 职场文书
详解Java实践之适配器模式
2021/06/18 Java/Android
Go归并排序算法的实现方法
2022/04/06 Golang
springboot读取resources下文件的方式详解
2022/06/21 Java/Android