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编程中运用闭包时所需要注意的一些地方
May 02 Python
详解python进行mp3格式判断
Dec 23 Python
快速实现基于Python的微信聊天机器人示例代码
Mar 03 Python
Python设计模式之命令模式简单示例
Jan 10 Python
python 阶乘累加和的实例
Feb 01 Python
使用PyCharm进行远程开发和调试的实现
Nov 04 Python
Python:type、object、class与内置类型实例
Dec 25 Python
Python使用uuid库生成唯一标识ID
Feb 12 Python
tensorflow模型转ncnn的操作方式
May 25 Python
Python安装Bs4的多种方法
Nov 28 Python
python 视频下载神器(you-get)的具体使用
Jan 06 Python
用Python进行栅格数据的分区统计和批量提取
May 27 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
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
2007/09/24 PHP
PHP 防恶意刷新实现代码
2010/05/16 PHP
php中rename函数用法分析
2014/11/15 PHP
基于PHP的加载类操作以及其他两种魔术方法的应用实例
2017/08/28 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
2018/05/16 PHP
javascript数组的扩展实现代码集合
2008/06/01 Javascript
javascript parseInt 函数分析(转)
2009/03/21 Javascript
十个优秀的Ajax/Javascript实例网站收集
2010/03/31 Javascript
禁止空格提交表单的js代码
2013/11/17 Javascript
jQuery绑定事件不执行但alert后可以正常执行
2014/06/03 Javascript
DOM基础教程之事件类型
2015/01/20 Javascript
AngularJs Forms详解及简单示例
2016/09/01 Javascript
Javascript中的async awai的用法
2017/05/17 Javascript
JavaScript中各数制转换全面总结
2017/08/21 Javascript
element vue Array数组和Map对象的添加与删除操作
2018/11/14 Javascript
python 布尔操作实现代码
2013/03/23 Python
探究Python多进程编程下线程之间变量的共享问题
2015/05/05 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
Python2.7编程中SQLite3基本操作方法示例
2017/08/09 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
2017/11/02 Python
Python参数传递及收集机制原理解析
2020/06/05 Python
PyQt5的相对布局管理的实现
2020/08/07 Python
python如何对链表操作
2020/10/10 Python
Django haystack实现全文搜索代码示例
2020/11/28 Python
python爬取微博评论的实例讲解
2021/01/15 Python
高职教师岗位职责
2013/12/24 职场文书
学前教育毕业生自荐信范文
2013/12/24 职场文书
一年级语文教学反思
2014/02/13 职场文书
建设投标担保书
2014/05/13 职场文书
大学毕业生管理学求职信
2014/09/01 职场文书
篮球友谊赛通讯稿
2014/10/10 职场文书
银行授权委托书样本
2014/10/13 职场文书
2014年社区计生工作总结
2014/11/18 职场文书
辩论会主持词
2015/07/03 职场文书
SQLServer之常用函数总结详解
2021/08/30 SQL Server
Nginx下SSL证书安装部署步骤介绍
2021/12/06 Servers