3.4 神经网络工具箱nn

3.4 神经网络工具箱nn

前面我们使用过Autograd和Tensor实现过机器学习。但对于大型网络,Autograd太过于底层和繁杂。所以我们使用nn工具箱。在nn工具箱里有两个重要模块:nn.Module,nn.functional

3.4.1 nn.Module

nn.Module是nn的一个核心数据结构,它可以是网络的某个层,也可以是包含多层的神经网络。最常见的做法是继承nn.Module类,生成自己的网络层,前面中就通过定义Net类就采用这种激活方法(class Net(nn.Module))。nn中已实现绝大多数层,包括全连接层、损失层、激活层、卷积层、循环层等,这些层都是nn.Module的子类,能够自动检测到自己的parameters,并将其作为学习参数,且针对GPU运行进行cuDNN优化。

3.4.2 nn.functional

nn中的层,一种是继承了nn.Module,其命名一般是nn.Xxx(第一个字母大写),如nn.Linear、nn.Conv2d、nn.CrossEntropyLoss。另一种是nn.functional中的函数,其名称一般是nn.functional.xxx,如nn.functional.linear、nn.functional.conv2d、nn.functional.cross_entropy等。从功能上说两者相当,不过在具体使用时,还是有区别的:
1、nn.Xxx继承与nn.Module,nn.Xxx需要先实例化并传入参数,然后以函数调用的方式调用实例化的对象并传入数据。它能够很好的地与nn.Sequential结合使用,而nn.functional.xxx无法与nn.sequential结合使用
2、nn.Xxx不需要自己定义和管理weight、bias参数;而nn.functional.xxx需要自己定义weight、bias参数,每次调用的时候都需要手动传入weight、bias参数,不利于代码复用
3、它们俩对Dropout在训练和测试阶段上操作还是有区别的,使用nn.Xxx定义Dropout,在调用model.eval()时,自动实现状态转换,而使用nn.functional.xxx无此功能
总结一下,两者功能基本相同,PyTorch官方推荐:具有学习参数的(例如:conv2d,linear,batch_norm)采用nn.Xxx方式。没有学习参数的(例如:maxpool,loss func、activation func)等根据个人使用习惯nn.functional.xxx或nn.Xxx方式。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值