Pytorch 中nn.Moudle 与 nn.functional 的区别

tech2023-07-31  101

一、命名区别

1.nn.Moudle中命名一般为: nn.Xxx (第一个X为大写)

例如:nn.Linear,nn.Conv2d,nn.CrossEntropyLoss等

2.nn.functional中命名一般为:nn.funtional.xxx

例如:nn.funicational.linear,nn.funicational.conv2d,nn.funicational.cross_entropy等

二、使用功能区别

从功能上来书两者相当,基于nn.Moudle能实现的层,使用nn.funicational也可以实现,反之亦然。

三、性能区别

从性能方面两者也没有太大差异。

四、使用区别

nn.Xxx 继承于 nn.Moudle,nn.Xxx 需要先实例化并传入参数,然后以函数调用的方式调用实例化的对象并传入输入数据。它能够很好地与 nn.Sequentual 结合使用,而 nn.funicational.xxx 无法与 nn.Sequential 结合使用nn.Xxx 不需要自己定义和管理 weight、bias 参数;而 nn.funicational.xxx 需要自己定义 weight、bias 参数,每次调用的时候都需要手动传入 weight、bias 等参数,不利于代码复用Dropout 操作在训练和测试阶段是有区别的,使用 nn.Xxx 方式定义 Dropout,在调用 model.evak() 之后,自动实现状态的转换,而使用 nn.funicational.xxx 却无此功能

总的来说,两种功能都是相同的。 官方推荐:具有学习参数的(例如: conv2d, linear, batch_norm)采用 nn.Xxx 方式。 没有学习参数的(例如: naxpool, loss func, activation func)等根据个人选择使用 nn.funicational.xxx 或者 nn.Xxx 方式

附: torch.nn 中文文档 torch.nn.functional 中文文档

最新回复(0)