介绍
线性层(Linear Layer),在神经网络中通常被称为全连接层或密集层,时神经网络中最基本的层之一,它的作用是对输入数据进行线性变换,主要包含矩阵乘法和加上偏置。
数学表示
线性层的计算公式为:
- input是输入数据矩阵,通常表示X,维度为(N,din),其中N是批量大小,din是输入特征的维度。
- weight是权重矩阵,通常表示为W,维度为(dout,din)。
- bias是偏置向量,通常表示为b,维度为(dout)。
- output是输出数据矩阵,维度为(N,dout)。
线性层的作用
线性层的主要作用是通过线性变换将输入数据映射到一个新的空间,改变数据的维度,便于后续层进一步处理。
PyTorch中的线性层
在PyTorch中,线性层由'torch.nn.Linear'类表示。
示例
简单的线性层
import torch
import torch.nn as nn
# 定义一个线性层,将输入维度 4 映射到输出维度 2
linear_layer = nn.Linear(4, 2)
# 创建一个输入张量,形状为 (1, 4)
input_tensor = torch.tensor([[1.0, 2.0, 3.0, 4.0]])
# 通过线性层进行前向传播
output_tensor = linear_layer(input_tensor)
print("输入张量:")
print(input_tensor)
print("输出张量:")
print(output_tensor)
在这个例子中:
- 我们定义了一个线性层
linear_layer
,输入维度为 4,输出维度为 2。 - 我们创建了一个形状为
(1, 4)
的输入张量input_tensor
。 - 通过线性层进行前向传播,得到形状为
(1, 2)
的输出张量output_tensor
。
带偏置的线性层
import torch
import torch.nn as nn
# 定义一个线性层,将输入维度 3 映射到输出维度 2,包含偏置项
linear_layer = nn.Linear(3, 2)
# 查看线性层的权重和偏置
print("权重矩阵:")
print(linear_layer.weight)
print("偏置向量:")
print(linear_layer.bias)
# 创建一个输入张量,形状为 (1, 3)
input_tensor = torch.tensor([[1.0, 2.0, 3.0]])
# 通过线性层进行前向传播
output_tensor = linear_layer(input_tensor)
print("输入张量:")
print(input_tensor)
print("输出张量:")
print(output_tensor)
在这个例子中:
- 我们定义了一个线性层
linear_layer
,输入维度为 3,输出维度为 2,并包含偏置项。 - 我们可以查看线性层的权重矩阵和偏置向量。
- 我们创建了一个形状为
(1, 3)
的输入张量input_tensor
。 - 通过线性层进行前向传播,得到形状为
(1, 2)
的输出张量output_tensor
。
多批次输入
import torch
import torch.nn as nn
# 定义一个线性层,将输入维度 5 映射到输出维度 3
linear_layer = nn.Linear(5, 3)
# 创建一个输入张量,形状为 (2, 5),表示有两个样本,每个样本有 5 个特征
input_tensor = torch.tensor([[1.0, 2.0, 3.0, 4.0, 5.0], [6.0, 7.0, 8.0, 9.0, 10.0]])
# 通过线性层进行前向传播
output_tensor = linear_layer(input_tensor)
print("输入张量:")
print(input_tensor)
print("输出张量:")
print(output_tensor)
在这个例子中:
- 我们定义了一个线性层
linear_layer
,输入维度为 5,输出维度为 3。 - 我们创建了一个形状为
(2, 5)
的输入张量input_tensor
,表示有两个样本,每个样本有 5 个特征。 - 通过线性层进行前向传播,得到形状为
(2, 3)
的输出张量output_tensor
。
总结
线性层是神经网络中最基本的构建模块之一,通过线性变换将输入数据映射到新的空间。通过调整输入和输出的维度,线性层可以在不同的特征空间之间进行变换,使模型能够更好地捕捉和表示数据中的复杂模式。通过 PyTorch 中的 nn.Linear
类,我们可以轻松地定义和使用线性层进行各种操作。