PyTorch中的nn.LeakyReLU()、nn.Module和nn.ModuleList
一.nn.LeakyReLU()函数
在 PyTorch 中,nn.LeakyReLU()
是一个激活函数,用于引入非线性性到神经网络中。Leaky ReLU 是修正线性单元(ReLU)的一种变体,它在输入为负数时不是完全置零,而是引入一个小的负斜率。nn.LeakyReLU()
的初始化参数如下:
negative_slope
(默认为0.01
):负斜率,指定当输入为负数时的斜率值。通常设置为一个小的正数。
举个例子,如下所示:
import torch
import torch.nn as nn
# 创建 LeakyReLU 激活函数实例
leaky_relu = nn.LeakyReLU(negative_slope=0.01)
# 假设有一个输入张量 x
x = torch.randn(3, 3)
# 将输入张量传递给 LeakyReLU 激活函数
output = leaky_relu(x)
在这个例子中,negative_slope
参数被设置为 0.01
,但可根据需求调整。Leaky ReLU 的主要优点之一是在输入为负数时允许一定的信息流,这有助于避免梯度消失问题,尤其在深层网络中。
二.nn.Module 模块
nn.Module
是 PyTorch 中所有神经网络模块的基类。任何自定义神经网络层、模型或其他组件都应该继承自 nn.Module
。其特征如下所示:
提供了一些基本功能,如参数管理、子模块追踪等。 允许定义网络层的前向传播逻辑。 能够自动追踪网络的参数,使得优化器可以更新这些参数。
举个例子,如下所示:
import torch.nn as nn
class SimpleModel(nn.Module):
def __init__(self):
super(SimpleModel, self).__init__()
self.fc = nn.Linear(in_features=10, out_features=5)
def forward(self, x):
return self.fc(x)
三.nn.ModuleList 模块
nn.ModuleList
是用于将多个子模块组合成列表形式的容器。它允许在模型中方便地管理多个子模块,例如堆叠多个层。其特征如下所示:
可以通过索引访问和操作列表中的每个子模块。 允许在 forward 方法中方便地迭代或使用列表中的模块。
举个例子,如下所示:
import torch.nn as nn
class ComplexModel(nn.Module):
def __init__(self):
super(ComplexModel, self).__init__()
self.layers = nn.ModuleList([
nn.Linear(in_features=10, out_features=5),
nn.ReLU(),
nn.Linear(in_features=5, out_features=1)
])
def forward(self, x):
for layer in self.layers:
x = layer(x)
return x
总之,在 PyTorch 中,nn.Module
和 nn.ModuleList
是用于构建神经网络的两个关键组件。nn.Module
提供了一个通用的神经网络模块的基类,而 nn.ModuleList
是用于管理多个子模块的容器。通常,nn.Module
的派生类会包含 nn.ModuleList
作为其属性,以构建更复杂的网络结构。
NLP工程化
1.本公众号以对话系统为中心,专注于Python/C++/CUDA、ML/DL/RL和NLP/KG/DS/LLM领域的技术分享。
2.本公众号Roadmap可查看飞书文档:https://z0yrmerhgi8.feishu.cn/wiki/Zpewwe2T2iCQfwkSyMOcgwdInhf
NLP工程化(公众号)
NLP工程化(星球号)