Pytorch torch.nn

PyTorch 的 torch.nn 模块是构建和训练神经网络的核心模块,它提供了丰富的类和函数来定义和操作神经网络。

1 模块核心架构

以下是 torch.nn 模块的一些关键组成部分及其功能:

1、nn.Module 类

  • nn.Module 是所有自定义神经网络模型的基类。用户通常会从这个类派生自己的模型类,并在其中定义网络层结构以及前向传播函数(forward pass)。

2、预定义层(Modules)

  • 包括各种类型的层组件,例如卷积层(nn.Conv1dnn.Conv2dnn.Conv3d)、全连接层(nn.Linear)、激活函数(nn.ReLUnn.Sigmoidnn.Tanh)等。

3、容器类

  • nn.Sequential:允许将多个层按顺序组合起来,形成简单的线性堆叠网络。
  • nn.ModuleList 和 nn.ModuleDict:可以动态地存储和访问子模块,支持可变长度或命名的模块集合。

4、损失函数(Loss Functions)

  • torch.nn 包含了一系列用于衡量模型预测与真实标签之间差异的损失函数,例如均方误差损失(nn.MSELoss)、交叉熵损失(nn.CrossEntropyLoss)等。

5、实用函数接口(Functional Interface)

nn.functional(通常简写为 F),包含了许多可以直接作用于张量上的函数,它们实现了与层对象相同的功能,但不具有参数保存和更新的能力。例如,可以使用 F.relu() 直接进行 ReLU 操作,或者 F.conv2d() 进行卷积操作。 

6、初始化方法

torch.nn.init 提供了一些常用的权重初始化策略,比如 Xavier 初始化 (nn.init.xavier_uniform_()) 和 Kaiming 初始化 (nn.init.kaiming_uniform_()),这些对于成功训练神经网络至关重要。

‌2 关键特性

特性说明
动态计算图前向传播自动构建计算图,反向传播通过loss.backward()自动求导
GPU加速通过.to('cuda')迁移模型至GPU,需CUDA 12.8+环境支持
参数管理parameters()方法获取所有可训练参数,支持分布式训练

3 PyTorch torch.nn 模块参考手册

3.1 神经网络容器

类/函数描述
torch.nn.Module所有神经网络模块的基类。
torch.nn.Sequential(*args)按顺序组合多个模块。
torch.nn.ModuleList(modules)将子模块存储在列表中。
torch.nn.ModuleDict(modules)将子模块存储在字典中。
torch.nn.ParameterList(parameters)将参数存储在列表中。
torch.nn.ParameterDict(parameters)将参数存储在字典中。

3.2 线性层

类/函数描述
torch.nn.Linear(in_features, out_features)全连接层。
torch.nn.Bilinear(in1_features, in2_features, out_features)双线性层。

3.3 卷积层

类/函数描述
torch.nn.Conv1d(in_channels, out_channels, kernel_size)一维卷积层。
torch.nn.Conv2d(in_channels, out_channels, kernel_size)二维卷积层。
torch.nn.Conv3d(in_channels, out_channels, kernel_size)三维卷积层。
torch.nn.ConvTranspose1d(in_channels, out_channels, kernel_size)一维转置卷积层。
torch.nn.ConvTranspose2d(in_channels, out_channels, kernel_size)二维转置卷积层。
torch.nn.ConvTranspose3d(in_channels, out_channels, kernel_size)三维转置卷积层。

3.4 池化层

类/函数描述
torch.nn.MaxPool1d(kernel_size)一维最大池化层。
torch.nn.MaxPool2d(kernel_size)二维最大池化层。
torch.nn.MaxPool3d(kernel_size)三维最大池化层。
torch.nn.AvgPool1d(kernel_size)一维平均池化层。
torch.nn.AvgPool2d(kernel_size)二维平均池化层。
torch.nn.AvgPool3d(kernel_size)三维平均池化层。
torch.nn.AdaptiveMaxPool1d(output_size)一维自适应最大池化层。
torch.nn.AdaptiveAvgPool1d(output_size)一维自适应平均池化层。
torch.nn.AdaptiveMaxPool2d(output_size)二维自适应最大池化层。
torch.nn.AdaptiveAvgPool2d(output_size)二维自适应平均池化层。
torch.nn.AdaptiveMaxPool3d(output_size)三维自适应最大池化层。
torch.nn.AdaptiveAvgPool3d(output_size)三维自适应平均池化层。

3.5 激活函数

类/函数描述
torch.nn.ReLU()ReLU 激活函数。
torch.nn.Sigmoid()Sigmoid 激活函数。
torch.nn.Tanh()Tanh 激活函数。
torch.nn.Softmax(dim)Softmax 激活函数。
torch.nn.LogSoftmax(dim)LogSoftmax 激活函数。
torch.nn.LeakyReLU(negative_slope)LeakyReLU 激活函数。
torch.nn.ELU(alpha)ELU 激活函数。
torch.nn.SELU()SELU 激活函数。
torch.nn.GELU()GELU 激活函数。

3.6损失函数

类/函数描述
torch.nn.MSELoss()均方误差损失。
torch.nn.L1Loss()L1 损失。
torch.nn.CrossEntropyLoss()交叉熵损失。
torch.nn.NLLLoss()负对数似然损失。
torch.nn.BCELoss()二分类交叉熵损失。
torch.nn.BCEWithLogitsLoss()带 Sigmoid 的二分类交叉熵损失。
torch.nn.KLDivLoss()KL 散度损失。
torch.nn.HingeEmbeddingLoss()铰链嵌入损失。
torch.nn.MultiMarginLoss()多分类间隔损失。
torch.nn.SmoothL1Loss()平滑 L1 损失。

3.7 归一化层

类/函数描述
torch.nn.BatchNorm1d(num_features)一维批归一化层。
torch.nn.BatchNorm2d(num_features)二维批归一化层。
torch.nn.BatchNorm3d(num_features)三维批归一化层。
torch.nn.LayerNorm(normalized_shape)层归一化。
torch.nn.InstanceNorm1d(num_features)一维实例归一化层。
torch.nn.InstanceNorm2d(num_features)二维实例归一化层。
torch.nn.InstanceNorm3d(num_features)三维实例归一化层。
torch.nn.GroupNorm(num_groups, num_channels)组归一化。

3.8 循环神经网络层

类/函数描述
torch.nn.RNN(input_size, hidden_size)简单 RNN 层。
torch.nn.LSTM(input_size, hidden_size)LSTM 层。
torch.nn.GRU(input_size, hidden_size)GRU 层。
torch.nn.RNNCell(input_size, hidden_size)简单 RNN 单元。
torch.nn.LSTMCell(input_size, hidden_size)LSTM 单元。
torch.nn.GRUCell(input_size, hidden_size)GRU 单元。

3.9 嵌入层

类/函数描述
torch.nn.Embedding(num_embeddings, embedding_dim)嵌入层。

3.10 Dropout 层

类/函数描述
torch.nn.Dropout(p)Dropout 层。
torch.nn.Dropout2d(p)2D Dropout 层。
torch.nn.Dropout3d(p)3D Dropout 层。

3.11  实用函数

函数描述
torch.nn.functional.relu(input)应用 ReLU 激活函数。
torch.nn.functional.sigmoid(input)应用 Sigmoid 激活函数。
torch.nn.functional.softmax(input, dim)应用 Softmax 激活函数。
torch.nn.functional.cross_entropy(input, target)计算交叉熵损失。
torch.nn.functional.mse_loss(input, target)计算均方误差损失。

4 实例

import torch
import torch.nn as nn

# 定义一个简单的神经网络
class SimpleNet(nn.Module):
    def __init__(self):
        super(SimpleNet, self).__init__()
        self.fc1 = nn.Linear(10, 20)
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(20, 1)

    def forward(self, x):
        x = self.fc1(x)
        x = self.relu(x)
        x = self.fc2(x)
        return x

# 创建模型和输入
model = SimpleNet()
input = torch.randn(5, 10)
output = model(input)
print(output)

### PyTorch `torch.nn` 高级用法 #### 自定义层实现 除了内置的标准神经网络组件外,PyTorch允许开发者创建自定义层来满足特定需求。通过继承`nn.Module`类并重写其中的方法可以轻松构建新的功能模块。 ```python import torch from torch import nn class CustomLayer(nn.Module): def __init__(self, input_features, output_features): super(CustomLayer, self).__init__() self.linear = nn.Linear(input_features, output_features) def forward(self, x): return torch.relu(self.linear(x)) ``` 此代码片段展示了如何定义一个新的线性变换加ReLU激活函数组合而成的简单定制化层[^1]。 #### 动态计算图支持 得益于PyTorch动态计算图机制,在训练过程中可以根据输入数据调整模型结构而无需重新编译整个程序。这使得实验更加灵活高效。 对于复杂的条件逻辑处理场景尤为有用: ```python def dynamic_forward(x): if sum(x).item() >= 0: branch_a = nn.Sequential( nn.Conv2d(3, 64, kernel_size=7), nn.ReLU(), nn.MaxPool2d(kernel_size=2) ) out = branch_a(x) else: branch_b = nn.Sequential( nn.Conv2d(3, 128, kernel_size=5), nn.ReLU(), nn.AvgPool2d(kernel_size=2) ) out = branch_b(x) return out ``` 上述例子中根据输入特征总和决定采用不同卷积分支路径。 #### 参数共享技巧 有时希望某些部分权重在整个网络内被多个地方共同使用,这时可以通过直接赋值方式实现在不同位置间共享参数。 下面的例子说明了两个全连接层之间共享相同的权值矩阵W: ```python shared_linear = nn.Linear(in_features=100, out_features=50) model_with_shared_params = nn.Sequential( shared_linear, nn.ReLU(), shared_linear, # Reuse the same layer instance here. nn.Sigmoid() ) ``` 这种做法有助于减少内存占用以及加速收敛过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值