一、簡介
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