PyTorch中nn-XXX与F-XXX的区别

nn.XXX与F.XXX

PyTorch中torch.nn**(以下简写为nn)中的模块和torch.nn.functional(以下简写为F)**中的模块都提供了常用的神经网络操作,包括激活函数、损失函数、池化操作等。它们的主要区别如下:

  • nn中的模块是以类形式存在的;F中的模块是以函数形式存在的
  • nn中的模块是nn.Module的子类,包含可学习参数、可导,在反向传播中可以计算梯度,可以在模型中作为子模块使用;F中的模块是纯函数,没有与之相关联的可学习参数,虽然也可以用于反向传播,但是其梯度需要手动计算
  • nn中的模块需要实例化后,将张量作为实例的调用参数;F中的模块直接传递张量作为参数
  • nn中的模块可以管理和访问模块的内部参数和状态;F中的函数是纯函数,没有与之相关联的参数或状态,因此无法直接管理和访问函数的内部状态

nn.Relu与F.relu()

以激活函数ReLu为例,在使用激活函数时,有以下两种方式可以使用:

python 复制代码
# 方法一
nn.ReLU()
# 方法二
F.relu(input)

这两种方法都是使用ReLu激活,但使用的场景不一样。

  • nn.ReLU是一个类,必须实例化后才能使用,一般在定义网络层的时候使用

    python 复制代码
    # nn.ReLU的常用方法
    nn.Sequential(
                nn.Conv2d(in_channels, out_channels),
                nn.ReLU(inplace=True)
            )
  • F.relu()是函数调用,一般使用在foreward()函数

  • nn.ReLU只能处理Variable类型的张量;而F.relu()可以处理Tensor和Variable类型的张量

  • nn.ReLU需要额外占用内存用来存储中间结果;而F.relu()则是直接在原张量上进行操作,不需要额外的内存占用

另外:

  • 当用print()打印输出神经网络时,会输出nn.ReLU()层,而F.relu()是没有输出的
相关推荐
2的n次方_几秒前
CANN ascend-transformer-boost 架构解析:融合注意力算子管线、长序列分块策略与图引擎协同机制
深度学习·架构·transformer
人工智能培训4 分钟前
具身智能视觉、触觉、力觉、听觉等信息如何实时对齐与融合?
人工智能·深度学习·大模型·transformer·企业数字化转型·具身智能
肖永威23 分钟前
macOS环境安装/卸载python实践笔记
笔记·python·macos
TechWJ39 分钟前
PyPTO编程范式深度解读:让NPU开发像写Python一样简单
开发语言·python·cann·pypto
枷锁—sha1 小时前
【SRC】SQL注入WAF 绕过应对策略(二)
网络·数据库·python·sql·安全·网络安全
abluckyboy1 小时前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法
喵手1 小时前
Python爬虫实战:构建各地统计局数据发布板块的自动化索引爬虫(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集数据csv导出·采集各地统计局数据发布数据·统计局数据采集
pp起床2 小时前
Gen_AI 补充内容 Logit Lens 和 Patchscopes
人工智能·深度学习·机器学习
天天爱吃肉82182 小时前
跟着创意天才周杰伦学新能源汽车研发测试!3年从工程师到领域专家的成长秘籍!
数据库·python·算法·分类·汽车
m0_715575342 小时前
使用PyTorch构建你的第一个神经网络
jvm·数据库·python