【如果笔记对你有帮助,欢迎关注&点赞&收藏,收到正反馈会加快更新!谢谢支持!】
目录
(ps:下面用法只列出较常用的参数)
1. nn.Linear 线性层(全连接层)
-
作用:将输入特征映射到输出特征
-
用法
nn.Linear(in_features, out_features) # 处理tensor最后一个维度
-
例子
layer = nn.Linear(16, 32) x = torch.randn(2,4,16) # (输入)x形状: torch.Size([2, 4, 16]) output = layer(x) # output形状: torch.Size([2, 4, 32])
2. nn.Conv1d (一维卷积层)
- 作用:处理一维序列数据(如音频、文本等),每个数据点有对应特征(维度即in_channels)
- 用法(in_channels, out_channels, kernel_size 这三个必须要给定)
nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1)
- 输入输出形状:
- 例子
layer = nn.Conv1d(16, 32, 3) # in_channels=16, out_channels=32, kernel_size=3 x = torch.randn(2,16,6) # 输入x:batch_size=2, in_channels=16, sequence_length=6 output = layer(x) # output形状:torch.Size([2, 32, 4])
3. nn.Conv2d(二维卷积层)
- 作用:处理二维数据(如图像),每个数据点有对应特征(维度即in_channels)
- 用法:
kernel_size, stride, padding, dilation 可以是 int 或 tuple (输入int就默认两个相等)torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1)
- 输入输出形状要求:
- 例子
layer = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=1) x = torch.randn(2, 3, 50, 50) # 输入x:batch_size=2, in_channels=16, H=50, W=50 output = layer(x) # torch.Size([2, 16, 50, 50])
4. nn.Conv3d (三维卷积层)
- 作用:处理三维序列数据(比如视频、点云),每个数据点有对应特征(维度即in_channels)
- 用法:
kernel_size, stride, padding, dilation 可以是 int 或 tuple (输入int就默认三个相等)torch.nn.Conv3d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1)
- 输入输出形状要求:
- 例子:
layer = nn.Conv3d(16, 32, (3, 5, 2), stride=(2, 1, 1), padding=(4, 2, 0)) x = torch.randn(2, 16, 10, 50, 100) # 输入x:batch_size=2, in_channels=16, D=10, H=50, W=100 output = layer(x) # torch.Size([2, 32, 8, 50, 99])
5. nn.MaxPool1d (一维最大池化层)
- 作用:降采样,减少数据的维度,保留重要特质
- 用法:
nn.MaxPool1d(kernel_size, stride=None, padding=0, dilation=1)
- 输入输出形状(和Conv1d一样):
- 例子:
layer = nn.MaxPool1d(3) # kernel_size=3 x = torch.randn(2,16,6) # 输入x:batch_size=2, in_channels=16, sequence_length=6 output = layer(x) # output形状:torch.Size([2, 16, 2])
6. nn.Embedding(嵌入层)
作用:
将离散的输入转换为连续的向量表示- 用法:
nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None)
- 例子:
layer = nn.Embedding(10, 3) # 索引0-9共十个数,每个数对应一个size为3的embedding x = torch.LongTensor([[1, 2, 4, 5], [0, 3, 2, 9]]) # x.shape: torch.Size([2, 4]) output = layer(x) # output.shape: torch.Size([2, 4, 3]) print(output) # tensor([[[ 1.0540, 1.1001, -0.5979], # [-0.5170, 0.7198, 0.6907], # [-0.2922, -0.1940, 0.2146], # [ 2.3867, -1.2277, 1.7305]], # [[ 1.1240, 0.1396, 1.0800], # [-0.2988, -0.3426, -1.1541], # [-0.5170, 0.7198, 0.6907], # [ 1.1608, -1.0140, 0.8074]]], grad_fn=<EmbeddingBackward0>)
7. nn.ReLU, nn.Sigmoid (激活函数)
- 作用:非线性变换
- 用法:
nn.ReLU() nn.Sigmoid()
- 例子:
layer = nn.Sigmoid() x = torch.randn(2, 16) output = layer(x) # output.shape: torch.Size([2, 16])
8. nn.BatchNorm1d (一维
批量归一化)
- 作用:处理一维序列数据,标准化每个batch的数据来加速训练过程,并减少内部协变量偏移
- 用法:
nn.BatchNorm1d(num_features)
- 输入输出形状:
- 例子:
layer = nn.BatchNorm1d(num_features=16) x = torch.randn(10, 16, 50) output = layer(x) # torch.Size([10, 16, 50])
-
nn.BatchNorm2d, nn.BatchNorm3d作用与nn.BatchNorm1d相同,用法参照nn.Conv2d, nn.Conv3d
9. nn.LayerNorm (层归一化)
- 作用:对样本的特征进行归一化,每个样本独立进行,可以保持样本之间的独立性
- 用法:
nn.LayerNorm(normalized_shape) # normalized_shape为int/tuple
- 代码:
# 只对特征维度归一化 layer = nn.LayerNorm(normalized_shape=16) x = torch.randn(10, 50, 16) output = layer(x) # output.shape: torch.Size([10, 50, 16]) # 对最后两个维度归一化(相当于对每个样本进行归一化) layer2 = nn.LayerNorm(normalized_shape=(50, 16)) x = torch.randn(10, 50, 16) output = layer(x) # output.shape: torch.Size([10, 50, 16])