当前位置:   article > 正文

Pytorch-04 神经网络模块

Pytorch-04 神经网络模块

网络模块概述

torch.nnPyTorch 中用于构建神经网络的模块,包括各种神经网络层、损失函数、优化器等。torch.nn 提供了丰富的功能和工具,使得用户可以方便地构建和训练各种类型的神经网络模型。以下是 torch.nn 模块的一些重要组成部分:

  1. 神经网络层(Neural Network Layers)torch.nn 中包含了各种常用的神经网络层,如全连接层(Linear)、卷积层(Conv2d)、池化层(MaxPool2d、AvgPool2d)等,可以通过简单地调用这些层来构建神经网络模型。

  2. 激活函数(Activation Functions)torch.nn 包含了多种激活函数,如 ReLU、Sigmoid、Tanh 等,用于引入非线性特性到神经网络中,帮助神经网络学习复杂的模式。

  3. 损失函数(Loss Functions)torch.nn 提供了各种损失函数,如交叉熵损失(CrossEntropyLoss)、均方误差损失(MSELoss)等,用于衡量模型输出与真实标签之间的差异。

  4. 优化器(Optimizers)torch.nn 中包含了各种优化器,如随机梯度下降(SGD)、Adam、RMSprop 等,用于更新模型参数以最小化损失函数。

  5. 模型容器(Model Containers)torch.nn 提供了一些模型容器,如 SequentialModuleListModuleDict 等,用于组织和管理神经网络的各个组件。

  6. 自定义模型(Custom Models):通过继承 torch.nn.Module 类,用户可以自定义自己的神经网络模型,定义网络结构和前向传播过程。

torch.nn 模块提供了丰富的功能和灵活性,使得用户可以轻松构建和训练各种类型的神经网络模型。通过结合 torch.nn 中的组件,用户可以构建复杂的神经网络结构,进行深度学习任务的实现和训练。

五类基础模块:线性函数(Linear Function),卷积函数(Convolutional Function),池化函数(Pooling Function),激活函数(Activation Function),损失函数(Loss Function)
两类功能模块:容器(Container),优化器(Optimizer)

基础模块

神经网络层(Neural Network Layers)是构建神经网络模型的基本组件,通过堆叠不同类型的层可以构建复杂的神经网络结构。以下是一些常见神经网络层的用法和代码示例:

1. 全连接层(Linear Layer):

全连接层是最常见的神经网络层,用于将输入数据与权重相乘并加上偏置,通常用于实现神经网络的前向传播过程,其本质上就是一个线性函数。线性函数按照有没有偏置的情况可分为仿射变换矩阵变换两种,仿射变换存在偏置,矩阵变换没有偏置。

import torch
import torch.nn as nn

# 创建一个全连接层,输入特征数为 3,输出特征数为 5,bias决定了是否存在偏置
linear_layer = nn.Linear(in_features=3, out_features=5, bias=False)
# 手动赋值权重
new_weights = torch.tensor([[1.0, 2.0, 3.0, 4.0, 5.0],
                            [0.1, 0.2, 0.3, 0.4, 0.5],
                            [10.0, 20.0, 30.0, 40.0, 50.0]])
# 手动赋值很少使用,但使用时注意转置矩阵
linear_layer.weight.data = new_weights.transpose(0, 1)

# 定义输入数据
input_data = torch.randn(4, 3)  # 4个样本,每个样本有3个特征
# 将输入数据传入全连接层
output = linear_layer(input_data)

# 查看输出
print("全连接层输出数据形状:", output.shape)
# 查看权重
print("Layer's weights:", linear_layer.weight.data)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
2. 卷积层(Convolutional Layer):

卷积层用于提取图像等数据中的特征,通过卷积操作对输入数据进行特征提取和降维。

import torch
import torch.nn as nn

# 创建一个卷积层,输入通道数为 3,输出通道数为 16,卷积核大小为 3x3
conv_layer = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3)

# 定义输入图像数据
input_data = torch.randn(1, 3, 28, 28)  # 1张图像,3个通道,大小为 28x28

# 将输入图像数据传入卷积层
output = conv_layer(input_data)

print("卷积层输出数据形状:", output.shape)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
3. 池化层(Pooling Layer):

池化层用于对特征图进行降采样,减少数据维度和计算量,常用的池化操作包括最大池化和平均池化。

import torch
import torch.nn as nn

# 创建一个最大池化层,池化核大小为 2x2
pooling_layer = nn.MaxPool2d(kernel_size=2)

# 定义输入特征图数据
input_data = torch.randn(1, 16, 16, 16)  # 1个特征图,通道数为 16,大小为 16x16

# 将输入特征图数据传入池化层
output = pooling_layer(input_data)

print("池化层输出数据形状:", output.shape)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
4. 激活函数(Activation Function)

在PyTorch的torch.nn模块中,有许多常见的激活函数可以用来引入非线性性到神经网络中。以下是一些常见的激活函数及其在PyTorch中的使用示例:

ReLU(Rectified Linear Unit)激活函数:

relu = nn.ReLU()
  • 1

Sigmoid激活函数:

sigmoid = nn.Sigmoid()
  • 1

Tanh(双曲正切)激活函数:

tanh = nn.Tanh()
  • 1

Softmax激活函数(通常用于多类别分类任务):

softmax = nn.Softmax(dim=1)  # 在指定维度上计算Softmax
  • 1

这些激活函数可以通过实例化torch.nn模块中相应的类来使用。在神经网络的前向传播过程中,将这些激活函数应用于线性层的输出可以帮助引入非线性性,从而增加模型的表达能力。

5. 损失函数(Loss Function)

在PyTorch的torch.nn模块中,提供了许多常见的损失函数,用于计算模型预测与目标之间的差异。以下是一些常见的损失函数及其在PyTorch中的使用示例:

  1. 均方误差损失(Mean Squared Error, MSE):
criterion = nn.MSELoss()
  • 1
  1. 交叉熵损失(Cross Entropy Loss):
criterion = nn.CrossEntropyLoss()
  • 1

这些损失函数可以通过实例化torch.nn模块中相应的类来使用。在训练神经网络时,这些损失函数通常与模型的输出和真实标签一起使用,用于计算模型的预测与实际目标之间的误差,并通过反向传播来调整模型的参数以最小化损失。

功能模块

1. 容器(Container)

在PyTorch中,torch.nn模块还提供了容器(Container)来组合不同的模块,以构建更复杂的神经网络结构。以下是一些常见的容器及其在PyTorch中的使用示例:

1.1 Sequential容器:按顺序组织模块的容器。

model = nn.Sequential(
    nn.Linear(10, 5),
    nn.ReLU(),
    nn.Linear(5, 1)
)
  • 1
  • 2
  • 3
  • 4
  • 5

1.2 ModuleList容器:类似于Python的列表,可以包含各种模块。

layers = nn.ModuleList([nn.Linear(10, 10), nn.ReLU(), nn.Linear(10, 1)])
  • 1

1.3 ModuleDict容器:类似于Python的字典,可以包含各种模块。

layers = nn.ModuleDict({
    'linear1': nn.Linear(10, 5),
    'relu': nn.ReLU(),
    'linear2': nn.Linear(5, 1)
})
  • 1
  • 2
  • 3
  • 4
  • 5

这些容器可以帮助组织和管理神经网络中的各个模块,使代码更具结构化和可维护性。你可以根据需要选择合适的容器来组合不同的模块,构建出符合需求的神经网络结构。

2. 优化器(Optimizer)

在PyTorch中,优化器(Optimizer)用于更新神经网络模型的参数,以最小化损失函数。以下是一些常见的优化器及其在PyTorch中的使用示例:

2.1 随机梯度下降(Stochastic Gradient Descent, SGD)优化器:

optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
  • 1

2.2 Adam优化器:

optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
  • 1

在上述示例中,我们使用torch.optim模块中的相应优化器类来实例化一个优化器对象,并传入模型的参数以及学习率作为参数。一旦创建了优化器对象,就可以在训练循环中使用它来更新模型的参数,从而最小化损失函数。

优化器的选择通常取决于具体的任务和模型性能,可以根据实验结果来选择最适合的优化器。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/607882
推荐阅读
相关标签
  

闽ICP备14008679号