文章目录

  • 写在前面
  • 正文
    • 为什么都用def forward,而不改个名字?
    • forward有什么特殊功能?
      • 第一条:.forward()可以不写
      • 第二条:优先运行forward方法
  • 总结

写在前面

以下是本人根据Pytorch学习过程中总结出的经验,如果有错误,请指正。

正文

为什么都用def forward,而不改个名字?

在Pytorch建立神经元网络模型的时候,经常用到forward方法,表示在建立模型后,进行神经元网络的前向传播。说的直白点,forward就是专门用来计算给定输入,得到神经元网络输出的方法。

在代码实现中,也是用def forward来写forward前向传播的方法,我原来以为这是一种约定熟成的名字,也可以换成任意一个自己喜欢的名字。

但是看的多了之后发现并非如此:Pytorch对于forward方法赋予了一些特殊“功能”

(这里不禁再吐槽,一些看起来挺厉害的Pytorch“大神”,居然不知道这个。。。只能草草解释一下:“就是这样的。。。”)

forward有什么特殊功能?
第一条:.forward()可以不写

我最开始发现forward()的与众不同之处就是在此,首先举个例子:

import torch.nn as nn
class test(nn.Module):def __init__(self, input):super(test,self).__init__()self.input = inputdef forward(self,x):return self.input * xT = test(8)
print(T(6))# print(T.forward(6))
--------------------------运行结果-------------------------
D:\Users\Lenovo\anaconda3\python.exe C:/Users/Lenovo/Desktop/DL/pythonProject/tt.py
48Process finished with exit code 0

可以发现,T(6)是可以输出的!而且不用指定,默认了调用forward方法。当然如果非要写上.forward()这也是可以正常运行的,和不写是一样的。

如果不调用Pytorch(正常的Python语法规则),这样肯定会报错的

# import torch.nn as nn  #不再调用torch
class test():def __init__(self, input):self.input = inputdef forward(self,x):return self.input * xT = test(8)
print(T.forward(6))
print("************************")
print(T(6))
--------------------------运行结果-------------------------
D:\Users\Lenovo\anaconda3\python.exe C:/Users/Lenovo/Desktop/DL/pythonProject/tt.py
48
************************
Traceback (most recent call last):File "C:\Users\Lenovo\Desktop\DL\pythonProject\tt.py", line 77, in <module>print(T(6))
TypeError: 'test' object is not callableProcess finished with exit code 1

这里会报:‘test’ object is not callable
因为class不能被直接调用,不知道你想调用哪个方法。

第二条:优先运行forward方法

如果在class中再增加一个方法:

import torch.nn as nn
class test(nn.Module):def __init__(self, input):super(test,self).__init__()self.input = inputdef byten(self):return self.input * 10def forward(self,x):return self.input * xT = test(8)
print(T(6))
print(T.byten())
--------------------------运行结果-------------------------
D:\Users\Lenovo\anaconda3\python.exe C:/Users/Lenovo/Desktop/DL/pythonProject/tt.py
48
80Process finished with exit code 0

可以见到,在class中有多个method的时候,如果不指定method,forward是会被优先执行的。

总结

在Pytorch中,forward方法是一个特殊的方法,被专门用来进行前向传播。

Pytorch中的forward的理解相关推荐

  1. pytorch中张量的阶数理解

    pytorch中张量的阶数理解 推荐打开2个页面,对比原四阶张量理解各阶的对应关系. 创建一个四阶张量: import torch x = torch.linspace(0,71,72).view(2 ...

  2. pytorch中数组维度的理解

    pytorch中数组维度理解与numpy中类似,pytorch中维度用dim表示,numpy中用axis表示 这里主要想说下维度的变化. dim = x ,表示在第x为上进行操作,那个维度会发生变化. ...

  3. Pytorch中维度dim的理解使用

    0 引言 pytorch中的维度dim主要被用在torch.softmax和torch.max等等函数中.理清dim的意思对于正确使用这些函数有重要意义. 1 相关博文: Pytorch笔记:维度di ...

  4. pytorch中的forward函数详细理解

    文章目录 前言 forward 的使用 forward 使用的解释 前言 最近在使用pytorch的时候,模型训练时,不需要使用forward,只要在实例化一个对象中传入对应的参数就可以自动调用 fo ...

  5. pytorch中gather函数的理解

    官方解释,很清楚了 torch.gather(input,dim,index,out=None) → Tensortorch.gather(input, dim, index, out=None) → ...

  6. pytorch中torch.manual_seed()的理解

    使用

  7. PyTorch中F.cross_entropy()函数

    对PyTorch中F.cross_entropy()的理解 PyTorch提供了求交叉熵的两个常用函数: 一个是F.cross_entropy(), 另一个是F.nll_entropy(), 是对F. ...

  8. pytorch中网络loss传播和参数更新理解

    相比于2018年,在ICLR2019提交论文中,提及不同框架的论文数量发生了极大变化,网友发现,提及tensorflow的论文数量从2018年的228篇略微提升到了266篇,keras从42提升到56 ...

  9. 三分钟完全了解PyTorch中卷积层内部计算方法和权值初始值的来历,让你对模型有更深层次的理解

    首先先说明第一个答案,也就是PyTorch中卷积层的计算方法,其实这点很多人可能在书上已经看过图了,我只是用代码复现一遍 我们把所有变量都明确,首先是输入变量,我们设为2 * 2的全1矩阵,如下: 然 ...

  10. python中size_x的意思,对pytorch中x = x.view(x.size(0), -1) 的理解说明

    在pytorch的CNN代码中经常会看到 x.view(x.size(0), -1) 首先,在pytorch中的view()函数就是用来改变tensor的形状的,例如将2行3列的tensor变为1行6 ...

最新文章

  1. Java8新特性-接口中的静态方法与默认方法
  2. globalmem设备代码分析
  3. 无限试用CrossOver 15天的办法
  4. 【angularjs】使用angular搭建项目,pc端实现网页中的内容不可复制
  5. 双线macd指标参数最佳设置_常用指标知多少(二)
  6. socket编程资料-网络收集
  7. 张勇云栖大会谈科技担当与责任:做开放共享人人受益的好科技
  8. android 通过访问 php 接受 or 传送数据
  9. 从零学ELK系列(四):Docker安装Elasticsearch(超详细图文教程)
  10. registerModule: 动态注册vuex模块,对于自定义生成组件很有用
  11. layout android name,android中的android:name属性
  12. 疫情核酸检测,应考虑使用刷身份证的方式
  13. Unity【Face Cap】- 关于人脸捕捉的解决方案(二)
  14. 上百种Python炫酷可视化案例珍藏版——看完掌握~一键三连~老板都想要给你升职加薪哟!
  15. c语言薛定谔方程,如何解薛定谔方程?-- k · p method
  16. (每日一练c++)有效的数独
  17. EspTouch概述
  18. 删除按升序排列的单链表中的所有重复元素
  19. AD域详细介绍和部署
  20. Mysql 5.7 表名大写遇到的坑 error: 1146: Table 'your_table' doesn't exist

热门文章

  1. 2017开发者技术和薪酬调查报告
  2. arm64平台进程全局页表pgd的创建和切换
  3. PhotoshopCC 2018(19.1.3)绿色精简/增强无需注册安装直接用
  4. UE4内容浏览器改文件夹名称后无法删除空文件夹
  5. 用C语言程序进行比赛日程排列
  6. Unity3D-人物角色选择
  7. Python调用百度API进行人像动漫化
  8. 【无线篇】(6.0) ❀ 10. FortiCloud 管理 AP (上) ❀ FortiAP 无线AP
  9. 与计算机学男生谈恋爱,和什么专业男生谈恋爱比较惨?
  10. 手把手教你在Unity2020中使用Timeline