• nn.Sequential、nn.Linear、nn.ReLU()函数


    nn.Sequential 是 PyTorch 中的一个容器模块,用于按照顺序组合多个神经网络层(如线性层、激活函数、池化层等)。这个容器允许你将各种层按照指定的顺序串联在一起,构建一个神经网络模型。nn.Sequential() 可以允许将整个容器视为单个模块(即相当于把多个模块封装成一个模块),forward()方法接收输入之后,nn.Sequential()按照内部模块的顺序自动依次计算并输出结果。

    (1)nn.Sequential函数

    以下是 nn.Sequential 函数的用法示例:

    import torch.nn as nn
    
    # 创建一个简单的神经网络模型
    model = nn.Sequential(
        nn.Linear(64, 128),  # 添加一个线性层,输入特征数为64,输出特征数为128
        nn.ReLU(),           # 添加一个ReLU激活函数层
        nn.Linear(128, 64),  # 添加一个线性层,输入特征数为128,输出特征数为64
        nn.ReLU()            # 添加一个ReLU激活函数层
    )
    
    # 打印模型的结构
    print(model)
    
    #输出结果
    #Sequential(
    #  (0): Linear(in_features=64, out_features=128, bias=True)
    #  (1): ReLU()
    #  (2): Linear(in_features=128, out_features=64, bias=True)
    #  (3): ReLU())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这个示例中,我们首先导入了 PyTorch 中的 nn 模块。然后,我们创建了一个简单的神经网络模型 model,该模型由四个层组成,按照顺序连接在一起。这些层包括两个线性层(全连接层)和两个ReLU激活函数层。每个层的构造函数中都包含了相应的参数,如输入特征数和输出特征数。

    你可以根据自己的需求,依次在 nn.Sequential 中添加不同类型的层,以构建你的神经网络模型。完成模型的定义后,你可以使用模型进行前向传播计算,对输入数据进行处理。

    另外,你还可以通过添加其他类型的层(如卷积层、池化层、批量归一化等)来定制更复杂的神经网络结构。总之,nn.Sequential 是一个方便的工具,用于按照顺序组合神经网络层,以构建神经网络模型。

    (2)nn.Linear函数

    nn.Linear 是 PyTorch 中的线性层(也称为全连接层或仿射层)的类,用于构建神经网络中的线性变换。线性层将输入张量与权重矩阵相乘,然后添加偏置(偏移量)来产生输出。这是深度学习中最常见的一种层类型之一,通常用于将输入数据映射到输出数据。

    以下是 nn.Linear 的构造函数及用法示例:

    import torch.nn as nn
    
    # 构造一个线性层
    linear_layer = nn.Linear(in_features, out_features, bias=True)
    
    # 输入数据
    input_data = torch.randn(batch_size, in_features)
    
    # 应用线性层
    output_data = linear_layer(input_data)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    下面是参数的解释:

    • in_features:输入特征的数量。这是输入张量的最后一个维度大小。

    • out_features:输出特征的数量。这是线性层产生的输出张量的最后一个维度大小。

    • bias:一个布尔值,指示是否应该包括偏置项(偏移量)。如果设置为 True,线性层将添加一个与输出特征数量相等的偏置向量;如果设置为 False,不会添加偏置。

    在示例中,我们首先导入了 PyTorch 的 nn 模块,然后创建了一个 nn.Linearlinear_layer,并通过构造函数指定了输入特征数和输出特征数。然后,我们生成了一个随机输入数据 input_data,该数据的形状为 (batch_size, in_features),其中 batch_size 是批处理大小,in_features 是输入特征数。

    最后,我们将 input_data 传递给 linear_layer,并获得输出数据 output_data。线性层将输入数据进行线性变换,然后添加偏置,生成了输出数据。

    线性层在神经网络中常用于将高维输入数据映射到低维输出数据,或者进行特征提取和转换。这种层的参数包括权重矩阵和偏置,这些参数可以通过反向传播进行训练,以适应特定的任务。

    (3)nn.ReLU()函数

    nn.ReLU() 是 PyTorch 中的激活函数层,用于引入非线性性质到神经网络中。ReLU 是 “Rectified Linear Unit” 的缩写,它是深度学习中最常用的激活函数之一。

    ReLU 激活函数的数学表达式如下:

    f(x) = max(0, x)
    
    • 1

    它的作用是将输入值 x 大于等于 0 的部分保持不变,小于 0 的部分置为零。这种操作引入了非线性性质,有助于神经网络学习复杂的非线性关系。

    以下是 nn.ReLU() 的用法示例:

    import torch.nn as nn
    
    # 创建一个ReLU激活函数层
    relu_layer = nn.ReLU()
    
    # 输入数据
    input_data = torch.randn(3, 3)  # 生成一个形状为(3, 3)的随机张量
    
    # 应用ReLU激活函数
    output_data = relu_layer(input_data)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在示例中,我们首先导入了 PyTorch 的 nn 模块,然后创建了一个 nn.ReLU()relu_layer。然后,我们生成了一个随机输入数据 input_data,该数据的形状是 (3, 3)

    最后,我们将 input_data 传递给 relu_layer,并获得输出数据 output_data。ReLU 激活函数将输入数据中小于 0 的部分设置为零,保持大于等于 0 的部分不变,因此 output_data 将具有相同的形状,但包含了非负值。

    ReLU 激活函数通常用于深度神经网络的隐藏层,它有助于网络学习非线性特征和表示。然而,需要注意的是,ReLU 可能会导致梯度消失的问题,特别是在深层网络中。因此,有时会使用其他激活函数变种,如 Leaky ReLU、Parametric ReLU 等,来缓解这个问题。

  • 相关阅读:
    持续集成指南:GitHubAction 自动构建+部署AspNetCore项目
    paperswithcode使用方法
    Netty源码研究笔记(1)——开篇
    基于PSO的UAV三维路径规划(Matlab代码实现)
    企业搭建SCRM系统, 为什么要选择私有化部署方案?
    2022IDEAMaven搭建MyBatis框架(标签和对象不理解的看一下初始那一期的基础部分)
    MySQL 操作语句大全(详细)
    Calendar日历类
    羧基修饰的聚苯乙烯微球(红色、橙色、绿色)的产品简介
    测开笔试笔记(1)
  • 原文地址:https://blog.csdn.net/thy0000/article/details/133587508