Pytorch nn.Linear的基本用法与原理详解

nn.Linear的基本定义

nn.Linear定义一个神经网络的线性层,方法签名如下:

torch.nn.Linear(in_features, # 输入的神经元个数
           out_features, # 输出神经元个数
           bias=True # 是否包含偏置
           )

Linear其实就是对输入 Pytorch nn.Linear的基本用法与原理详解 执行了一个线性变换,即:

Pytorch nn.Linear的基本用法与原理详解

其中Pytorch nn.Linear的基本用法与原理详解是模型要学习的参数,Pytorch nn.Linear的基本用法与原理详解 的维度为 Pytorch nn.Linear的基本用法与原理详解 , Pytorch nn.Linear的基本用法与原理详解 是o维的向量偏置Pytorch nn.Linear的基本用法与原理详解 为输入向量的行数(例如,你想一次输入10个样本,即batch_size为10,则Pytorch nn.Linear的基本用法与原理详解 ),Pytorch nn.Linear的基本用法与原理详解 为输入神经元的个数(例如你的样本特征数为5,则 Pytorch nn.Linear的基本用法与原理详解 ),Pytorch nn.Linear的基本用法与原理详解 为输出神经元的个数。

使用演示:

from torch import nn
import torch

model = nn.Linear(2, 1) # 输入特征数为2,输出特征数为1
input = torch.Tensor([1, 2]) # 给一个样本,该样本有2个特征(这两个特征的值分别为1和2)
output = model(input)
output
tensor([-1.4166], grad_fn=<AddBackward0>)

我们的输入为[1,2],输出了[-1.4166]。可以查看模型参数验证一下上述的式子:

# 查看模型参数
for param in model.parameters():
    print(param)
Parameter containing:
tensor([[ 0.1098, -0.5404]], requires_grad=True)
Parameter containing:
tensor([-0.4456], requires_grad=True)

可以看到,模型有3个参数,分别为两个权重和一个偏执。计算可得:

Pytorch nn.Linear的基本用法与原理详解

实战

假设我们的一次输入三个样本A,B,C(即batch_size为3),每个样本的特征数量为5:

A: [0.1,0.2,0.3,0.3,0.3]
B: [0.4,0.5,0.6,0.6,0.6]
C: [0.7,0.8,0.9,0.9,0.9]

则我们的输入向量 Pytorch nn.Linear的基本用法与原理详解 为:

X = torch.Tensor([
    [0.1,0.2,0.3,0.3,0.3],
    [0.4,0.5,0.6,0.6,0.6],
    [0.7,0.8,0.9,0.9,0.9],
])
X
tensor([[0.1000, 0.2000, 0.3000, 0.3000, 0.3000],
        [0.4000, 0.5000, 0.6000, 0.6000, 0.6000],
        [0.7000, 0.8000, 0.9000, 0.9000, 0.9000]])

定义线性层,我们的输入特征为5,所以in_feature=5,我们想让下一层的神经元个数为10,所以out_feature=10,则模型参数为:Pytorch nn.Linear的基本用法与原理详解

model = nn.Linear(in_features=5, out_features=10, bias=True)

经过线性层,其实就是做了一件事,即:Pytorch nn.Linear的基本用法与原理详解

具体表示则为:
Pytorch nn.Linear的基本用法与原理详解

其中 Pytorch nn.Linear的基本用法与原理详解就表示第Pytorch nn.Linear的基本用法与原理详解个样本,Pytorch nn.Linear的基本用法与原理详解 表示所有输入神经元到第Pytorch nn.Linear的基本用法与原理详解个输出神经元的权重。

Pytorch nn.Linear的基本用法与原理详解

注意:这里图有点问题,应该是Pytorch nn.Linear的基本用法与原理详解

因为有三个样本,所以相当于依次进行了三次 Pytorch nn.Linear的基本用法与原理详解,然后再将三个 Pytorch nn.Linear的基本用法与原理详解 叠在一起

经过线性层后,我们最终的到了Pytorch nn.Linear的基本用法与原理详解维的矩阵,即 输入3个样本,每个样本维度为5,输出为3个样本,将每个样本扩展成了10维

model(X).size()
torch.Size([3, 10])

参考资料

nn.Linear官方文档:https://pytorch.org/docs/stable/generated/torch.nn.Linear.html

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2023年3月10日 上午8:32
下一篇 2023年3月10日 上午8:33

相关推荐