Pytorch深度学习框架实战教程-番外篇10-PyTorch中的nn.Linear详解
相关文章 + 视频教程
《Pytorch深度学习框架实战教程01》《视频教程》
《Pytorch深度学习框架实战教程02:开发环境部署》《视频教程》
《Pytorch深度学习框架实战教程03:Tensor 的创建、属性、操作与转换详解》《视频教程》
《Pytorch深度学习框架实战教程04:Pytorch数据集和数据导入器》《视频教程》
《Pytorch深度学习框架实战教程05:Pytorch构建神经网络模型》《视频教程》
《Pytorch深度学习框架实战教程06:Pytorch模型训练和评估》《视频教程》
《Pytorch深度学习框架实战教程09:模型的保存和加载》《视频教程》
《Pytorch深度学习框架实战教程10:模型推理和测试》《视频教程》
《Pytorch深度学习框架实战教程-番外篇01-卷积神经网络概念定义、工作原理和作用》
《Pytorch深度学习框架实战教程-番外篇02-Pytorch池化层概念定义、工作原理和作用》
《Pytorch深度学习框架实战教程-番外篇03-什么是激活函数,激活函数的作用和常用激活函数》
《PyTorch 深度学习框架实战教程-番外篇04:卷积层详解与实战指南》
《Pytorch深度学习框架实战教程-番外篇05-Pytorch全连接层概念定义、工作原理和作用》
《Pytorch深度学习框架实战教程-番外篇06:Pytorch损失函数原理、类型和案例》
《Pytorch深度学习框架实战教程-番外篇10-PyTorch中的nn.Linear详解》
在PyTorch中,nn.Linear是一个非常重要的模块,它用于创建一个全连接层(fully connected layer),也就是神经网络中的线性层。这个层会对输入数据应用一个线性变换,即y = xA^T + b,其中x是输入数据,A是层的权重,b是偏置项。
1. 基本用法: nn.Linear的基本用法非常简单,只需要指定输入和输出的特征数量即可。例如,如果我们想要创建一个输入特征为64,输出特征为10的全连接层,我们可以这样做:
import torch.nn as nn# 创建一个全连接层,输入特征为64,输出特征为10linear_layer = nn.Linear(in_features=64, out_features=10)
在这个例子中,in_features参数指的是每个输入样本的大小,而out_features参数指的是每个输出样本的大小。如果bias参数设置为True(默认值),这个层还会学习一个加法偏置。
2. 参数初始化: nn.Linear模块的权重和偏置参数会自动进行初始化。权重通常从一个均匀分布U(-k, k)中初始化,其中k = 1 / in_features。如果bias为True,偏置也会从同样的分布中初始化。
3. 示例: 下面是一个使用nn.Linear的简单示例。假设我们有一个形状为[128, 20]的输入张量,我们想要通过全连接层转换为形状为[128, 30]的输出张量:
import torch# 创建一个全连接层m = nn.Linear(20, 30)# 创建一个随机输入张量input_tensor = torch.randn(128, 20)# 通过全连接层传递输入张量output_tensor = m(input_tensor)# 输出张量的形状print(output_tensor.size()) # 输出: torch.Size([128, 30])
在这个例子中,我们首先创建了一个全连接层m,它将20个输入特征转换为30个输出特征。然后,我们创建了一个随机的输入张量input_tensor,并将其传递给全连接层。最后,我们打印输出张量的形状,确认它是我们期望的形状。
4. 全连接层的作用: 全连接层通常位于卷积神经网络的末端,它的主要作用是将卷积层输出的二维特征图转换为一维向量,从而实现端到端的学习过程。全连接层的每个节点都与上一层的所有节点相连,因此参数数量通常很多。全连接层在整个网络中起到“分类器”的作用,将学到的特征表示映射到样本的标记空间。
5. 实际操作: 在实际操作中,全连接层可以通过卷积操作来实现。例如,对于前层是全连接的全连接层,可以转换为卷积核为1x1的卷积。而对于前层是卷积层的全连接层,可以转换为卷积核大小与前层卷积输出结果的高和宽相同的全局卷积。
通过这些信息,我们可以更好地理解nn.Linear在PyTorch中的作用和用法,以及如何在我们的神经网络模型中有效地使用它。