一、简介
nn全称为neural network,意思是神经网络,是torch中构建神经网络的模块。
二、子模块介绍
2.1 nn.functional
该模块包含构建神经网络需要的函数,包括卷积层、池化层、激活函数、损失函数、全连接函数等。
例如:import torch.nn.functional as F
loss_func = F.cross_entropy #本例使用的是functional子模块的交叉熵损失函数。
loss = loss_func(model(x), y)
loss.backward() #更新权重及偏移量
2.1.1 nn.functional模块常见函数
linear() relu() conv2d
() conv1d()
avg_pool1d()
avg_pool2d()
threshold
() sigmoid()
tanh()
softmax() 等
详见地址:https://pytorch-cn.readthedocs.io/zh/latest/package_references/functional/
2.1.2 nn.functional中的函数与nn.Module()的区别是(例如:nn.functional.conv2d()和
):nn.Conv2d()
(1)nn.Module实现的层(layer)是一个特殊的类,都是由class Layer(nn.Module)定义,会自动提取可学习的参数。functinal模块中的函数就是一个函数。
(2)如果模型有可学习的参数时,最好使用nn.Module;否则既可以使用nn.functional也可以使用nn.Module,二者在性能上没有太大差异,
具体的使用方式取决于个人喜好。由于激活函数(ReLu、sigmoid、Tanh)、池化(MaxPool)等层没有可学习的参数,可以使用对应的functional函数,
而卷积、全连接等有可学习参数的网络建议使用nn.Module。
2.2 nn.Module & nn.Parameter
2.3 torch.nn.Sequential()
时序容器:参数为卷积层、池化层或激活层等,也可以用排序字典作为参数。例如:
# Example of using Sequential
model = nn.Sequential(
nn.Conv2d(1,20,5),
nn.ReLU(),
nn.Conv2d(20,64,5),
nn.ReLU())
model = nn.Sequential(OrderedDict([
('conv1', nn.Conv2d(1,20,5)),
('relu1', nn.ReLU()),
('conv2', nn.Conv2d(20,64,5)),
('relu2', nn.ReLU()) ]))
2.4 torch.nn.ModuleList & torch.nn.ParameterList