淄博做网站建设公司,wordpress小工具自定义,wordpress批量删除字段,c 微信小程序开发教程nn.XXX与F.XXX
PyTorch中torch.nn**#xff08;以下简写为nn#xff09;中的模块和torch.nn.functional#xff08;以下简写为F#xff09;**中的模块都提供了常用的神经网络操作#xff0c;包括激活函数、损失函数、池化操作等。它们的主要区别如下#xff1a;
nn中的…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为例在使用激活函数时有以下两种方式可以使用
# 方法一
nn.ReLU()
# 方法二
F.relu(input)这两种方法都是使用ReLu激活但使用的场景不一样。 nn.ReLU是一个类必须实例化后才能使用一般在定义网络层的时候使用 # nn.ReLU的常用方法
nn.Sequential(nn.Conv2d(in_channels, out_channels),nn.ReLU(inplaceTrue))F.relu()是函数调用一般使用在foreward()函数中 nn.ReLU只能处理Variable类型的张量而F.relu()可以处理Tensor和Variable类型的张量 nn.ReLU需要额外占用内存用来存储中间结果而F.relu()则是直接在原张量上进行操作不需要额外的内存占用
另外
当用print()打印输出神经网络时会输出nn.ReLU()层而F.relu()是没有输出的