torch.nn和torch.nn.functional的区别

torch.nn 中大多数 layer 在 torch.nn.funtional 中都有一个与之对应的函数。二者的区别在于:
torch.nn.Module 中实现 layer 的都是一个特殊的类会自动提取可学习的参数

nn.functional 中的函数,更像是纯函数,由 def function( ) 定义,只是进行简单的数学运算而已。即 functional 中的函数是一个确定的不变的运算公式,输入数据产生输出就ok。而深度学习中会有很多权重是在不断更新的,不可能每进行一次 forward 就用新的权重重新来定义一遍函数来进行计算,所以说就会采用类的方式,以确保能在参数发生变化时仍能使用我们之前定好的运算步骤。

从上可知,如果模型有可学习的参数,最好使用nn.Module对应的相关layer,否则二者都可以使用,没有什么区别。比如Relu其实没有可学习的参数,只是进行一个运算而已,所以使用的就是functional中的relu函数,而卷积层和全连接层都有可学习的参数,所以用的是nn.Module中的类。

不具备可学习参数的层,将它们用函数代替,这样可以不用放在构造函数中进行初始化。

更详细可以参考:torch.nn 与 torch.nn.functional 的区别

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值