访问作者github: https://github.com/NefelibataBIGR/PyTorch_Notes ,获取笔记代码
五、神经网络的搭建
具体代码见Python>pytorch文件中的 ==nn.ipynb== 文件
- torch.nn
1. nn.Module
骨架
torch.nn.Module()
- 搭建的神经网络都是继承这个类
官方给的例子:
import torch.nn as nn
import torch.nn.functional as F
class Model(nn.Module): # 继承Module类
def __init__(self) -> None:
super().__init__() # 调用父类(Module)的初始化函数
self.conv1 = nn.Conv2d(1, 20, 5) # 自己写,定义卷积1操作
self.conv2 = nn.Conv2d(20, 20, 5) # 自己写,定义卷积2操作
def forward(self, x): # 前向传播函数
x = F.relu(self.conv1(x)) # 先卷积1再经过relu层
return F.relu(self.conv2(x)) # 再卷积2最后经过relu层,最后输出
注意理解每一行在干什么
2. 卷积层
主要:
- nn.Conv1d
- nn.Conv2d
nn.Conv2d() / nn.functional.conv2d()
二维卷积(图像)
nn.Conv2d 参考官方文档:Conv2d — PyTorch 2.6 documentation
nn.functional.conv2d 参考官方文档:torch.nn.functional.conv2d — PyTorch 2.6 documentation
两者区别看这个:【pytorch】torch.nn 与 torch.nn.functional 的区别_为什么我的torch没有torch.nn.functional呢-CSDN博客
参数(以nn.functional.conv2d为例):
- input:输入
- 注意形状: (batch , in_channels , iH , iW)
- weight:卷积核
- 注意形状: (out_channels , in_channels , kH , kW)
- stride:步长,默认=1
- padding:边界0填充,默认=0
- ……(具体看官方文档!)
- input:输入
nn.Conv2d参数(具体看官方文档!):

输出长宽计算(参数根据这个来取值):

具体代码见代码文件
3. 池化层
以最大池化为例(最常用)
nn.MaxPool2d()
注意输入tensor的形状要求
参数:
- kernel_size:池化核的大小
- stride:步长,默认为池化核的大小
- padding:边界0填充,默认=0
- ceil_mode:默认=False,=True向上取整,即不足池化核大小也保留边界余量取最大池化
输出长宽计算(参数根据这个来取值):

4. 非线性激活层
- 主要有:
- nn.ReLU()
- nn.Sigmoid()
- 参考官方文档:torch.nn — PyTorch 2.6 documentation
- 具体代码见代码文件
5. 线性层 与 其他层、模型
其他层:
- 归一化层(Normalization Layers)
- RNN相关层(Recurrent Layers)
- Transformer层(Transformer Layers)
- Dropout层(Dropout Layers)
都可以在官方文档里面找到
模型:
- torchvision.models里面很多现成的模型(图像视觉方面)
线性层 / 全连接层(Linear Layers)
- nn.Linear()
- 参数:
- in_features:输入特征数
- out_features:输出特征数(即神经元个数)
- bias:是否有设置偏置项,默认=True设置
- 参数:
- nn.Linear()
6. ==nn.Sequential==
- 类似pipline,模型的工作流
- 可以减轻工作量