【深度学习】全网最详细的Pytorch nn.Linear基本用法与原理详解
作为Pytorch中最基础和常用的神经网络层之一,nn.Linear在各类深度学习模型中都扮演着至关重要的角色。它被广泛应用于全连接层、回归任务、分类任务等场景。那么这个层究竟有什么样的特点和原理呢?让我们一起来深入探讨。
nn.Linear的基本用法
nn.Linear是Pytorch中定义全连接层的基本方式。它的构造函数如下所示:
torch.nn.Linear(in_features, out_features, bias=True, device=None, dtype=None)
in_features
: 输入特征的数量out_features
: 输出特征的数量bias
: 是否使用偏置项,默认为Truedevice
: 指定运算设备,如’cpu’或’cuda’dtype
: 指定数据类型,如torch.float32
我们可以通过以下方式构建一个nn.Linear层:
import torch.nn as nn
# 构建一个有5个输入特征,10个输出特征的全连接层
linear_layer = nn.Linear(5, 10)
在前向传播时,我们只需要将输入tensor传入这个层即可得到输出:
input_tensor = torch.randn(3, 5) # batch_size为3,输入特征数为5
output_tensor = linear_layer(input_tensor)
print(output_tensor.shape) # torch.Size([3, 10])
可以看到,输出tensor的shape变成了[batch_size, out_features],完成了特征的线性变换。
nn.Linear的原理
nn.Linear之所以能实现特征的线性变换,是因为它内部封装了两个可学习的参数:
- 权重矩阵
weight
: 形状为(out_features, in_features),用于线性变换 - 偏置向量
bias
: 形状为(out_features,),用于增加偏移
我们可以通过以下方式访问和修改这两个参数:
print(linear_layer.weight.shape) # torch.Size([10, 5])
print(linear_layer.bias.shape) # torch.Size([10])
# 修改权重和偏置
linear_layer.weight.data.fill_(0.5)
linear_layer.bias.data.fill_(0.1)
在前向传播时,nn.Linear实现的计算公式如下:
output = input @ weight.t() + bias
其中 @
表示矩阵乘法。也就是说,输入tensor先与权重矩阵转置相乘,再加上偏置向量,就得到了输出tensor。
这样的线性变换在很多场景下都非常有用,例如:
- 全连接层: 将上一层的输出线性变换到下一层的输入
- 回归任务: 将特征线性映射到目标输出
- 分类任务: 将特征线性映射到类别概率
总之,nn.Linear作为Pytorch中一个非常基础和重要的层,是构建各种神经网络模型的基石。希望通过本文的介绍,大家对它的用法和原理有了进一步的认识和理解。如果还有任何疑问,欢迎随时交流探讨!