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()是没有输出的
相关推荐
147API7 分钟前
学生模型和教师模型怎样做路由,阈值应该看哪些指标
网络·人工智能·深度学习·机器学习·智能路由器
liuze40811 分钟前
安装boss-zhipin-mcp(招聘)
开发语言·python
TickDB12 分钟前
Python 接入 A 股盘前集合竞价数据:AkShare 报错到 TickDB 实测的完整解法
python·websocket·行情数据 api
2601_9622982725 分钟前
【自动化测试】基于Selenium + Python的web自动化框架
自动化测试·python·selenium·测试用例·web框架
2601_9620775328 分钟前
Python 条件表达式
python·语法·列表推导式·条件表达式·pep308
HyperAI超神经34 分钟前
机器人运动误差降低90.4%,英伟达/哈佛等提出Hydra-0,用Action Flow统一世界建模与控制
人工智能·深度学习·机器人·英伟达·世界模型
右耳朵猫AI1 小时前
Python周刊2026W36 | Python 3.15候选版、RISC-V获CPython支持、PEP 843、asyncio修复
python·sqlite·risc-v
2601_962296281 小时前
Pytorch转ONNX详解
pytorch·深度学习·框架·onnx·模型转换
liliangcsdn1 小时前
基于信号强度的稀疏选股算法的探索分析
开发语言·python