一、神经网络
神经网络核心组件:包括层、模型、损失函数、优化器。
- 层:神经网络的基本结构,将输入张量转换为输出张量。
- 模型:层构成的网络。
- 损失函数:参数学习的目标函数,通过最小化损失函数来学习各种参数
- 优化器:如何是损失函数最小,这就涉及到优化器
二、构建神经网络的主要工具
1、nn.Module:继承自Module类,可自动提取可学习的参数。适用于卷积层、全连接层、dropout层。
2、nn.functional:更像是纯函数。适用于激活函数、池化层。
三、构建神经网络的主要工具
1、nn.Module,写法一般为nn.Xxx,如nn.Linear、nn.Conv2d、nn.CrossEntropyLoss等。
2、nn.functional中的函数,写法一般为nn.funtional.xxx,如nn.funtional.linear、nn.funtional.conv2d、nn.funtional.cross_entropy等。
3、两者的主要区别如下。
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却无此功能。
四、构建模型
1、继承nn.Module基类构建模型。
2、使用nn.Sequential按层顺序构建模型。
3、继承nn.Module基类构建模型,又使用相关模型容器(nn.Sequential,nn.ModuleList,nn.ModuleDict等)进行封装。
运行结果:
(1)利用可变参数
该方法构建时不能给每个层指定名称,如果需要给每个层指定名称,可使用add_module方法或OrderedDict方法。
(2)使用add_module方法
(3)使用OrderedDict方法