Pytorch学习笔记(六):view()和nn.Linear()函数详解

相关文章

Pytorch学习笔记(一):torch.cat()模块的详解
Pytorch学习笔记(二):nn.Conv2d()函数详解
Pytorch学习笔记(三):nn.BatchNorm2d()函数详解
Pytorch学习笔记(四):nn.MaxPool2d()函数详解
Pytorch学习笔记(五):nn.AdaptiveAvgPool2d()函数详解
Pytorch学习笔记(六):view()和nn.Linear()函数详解
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解


✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️✅💖⚠️

1. 函数语法格式和作用⚠️

1.1 (view) 作用⚠️

在 PyTorch 中,view 函数是一个非常实用的张量操作函数,它的主要目的是对多维张量的数据形状进行调整。具体来说,它能够将具有复杂形状的多维数据,例如形状为(none,36,2,2)的张量,平铺为一维张量,例如转换为(none,144)的形状。这里的 “none” 通常表示张量的第一个维度是动态的,会根据实际输入数据的批次大小而变化。

这种功能类似于 Keras 中的 Flatten 函数,它们都用于将高维数据转换为一维数据,以便后续的处理。不过,二者在使用方式上存在一些差异。在 Keras 中,Flatten 函数通常是和卷积层等其他层一起组合使用,在构建模型的网络结构时进行声明。而在 PyTorch 中,view 函数一般是在模型的 forward 方法中才进行声明和使用。这是因为 PyTorch 的设计理念更强调灵活性和动态性,允许开发者在模型的前向传播过程中根据具体需求对张量形状进行调整。

从本质上讲,view 函数的作用相当于 reshape 操作,它在不改变张量元素内容的前提下,重新定义张量的形状。但需要注意的是,view 函数要求张量在内存中是连续存储的,否则可能会导致错误。如果张量不连续,可以先使用 contiguous 方法将其转换为连续的张量,再使用 view 函数进行形状调整。

1.2 (view) 函数语言格式⚠️

view(out.size(0), -1)-------(none,3622)平铺为一维如(none,144)
或者
view(-1, 1, 28, 28)-------torch.Size([96, 784])变为torch.Size([96, 1, 28, 28]) 

在第一种格式 view(out.size(0), -1) 中,out.size(0) 表示保持张量的第一个维度不变,即批次维度。-1 是一个特殊的参数,它表示根据张量的总元素数量自动计算该维度的大小。例如,对于形状为(none,36,2,2)的张量,总元素数量为 none * 36 * 2 * 2,当使用 view(out.size(0), -1) 时,第二个维度会自动计算为 36 * 2 * 2 = 144,从而实现将多维张量平铺为一维张量的效果。

在第二种格式 view(-1, 1, 28, 28) 中,-1 同样表示自动计算维度大小。这里将形状为 torch.Size([96, 784]) 的张量转换为 torch.Size([96, 1, 28, 28]),是因为 96 * 784 = 96 * 1 * 28 * 28,通过这种方式可以将一维数据重新调整为具有特定形状的多维张量,以满足后续模型层的输入要求。

1.3 (nn.Linear) 作用⚠️

nn.Linear 是 PyTorch 中用于定义全连接层(fully connected layer,简称 fc)的类。全连接层在神经网络中起着至关重要的作用,它能够将输入数据的特征映射到指定的输出空间。

nn.Linear 的主要功能之一是可以固定输出通道数。在神经网络的构建过程中,通过调整 nn.Linear 层的参数,我们可以控制输出特征的维度,使得模型能够对输入数据进行有效的特征提取和变换。例如,在图像分类任务中,经过一系列卷积层和池化层处理后,得到的特征图需要通过全连接层将其映射到分类标签的维度上。通过设置 nn.Linear 层的 out_features 参数,我们可以指定输出的维度,从而实现对分类结果的预测。

此外,全连接层还可以学习到输入特征之间的复杂关系,通过权重矩阵和偏置向量对输入数据进行线性变换,将不同的特征组合起来,为模型提供更强大的表达能力。

1.4 (nn.Linear) 函数语言格式⚠️

nn.Linear(in_features, out_features, bias=True)

in_features 表示输入特征的维度,即输入张量的最后一维的大小。例如,如果输入张量的形状为 (batch_size, input_dim),那么 in_features 就是 input_dim

out_features 表示输出特征的维度,即经过全连接层变换后输出张量的最后一维的大小。这个参数决定了全连接层输出的特征数量,它直接影响着模型的表达能力和计算复杂度。

bias 是一个布尔值,默认值为 True。当 biasTrue 时,全连接层会在计算过程中添加一个偏置向量,这个偏置向量可以帮助模型更好地拟合数据,提高模型的准确性。如果 biasFalse,则不会添加偏置向量,此时全连接层的计算仅仅是输入数据与权重矩阵的矩阵乘法。

例如,要定义一个将输入特征维度为 100 映射到输出特征维度为 50 的全连接层,可以使用以下代码:

import torch.nn as nn

linear_layer = nn.Linear(100, 50)

在模型的 forward 方法中,可以这样使用该全连接层:

def forward(self, x):
    x = linear_layer(x)
    return x

通过这种方式,我们可以在 PyTorch 模型中灵活地使用全连接层,根据具体的任务需求调整模型的结构和参数。

2.参数解释⚠️

  • in_features指的是输入的二维张量的大小,即输入的[batch_size, size]中的size。

  • out_features指的是输出的二维张量的大小,即输出的二维张量的形状为[batch_size,output_size],当然,它也代表了该全连接层的神经元个数。

  • bias默认为True,可以学到额外的偏置

  • 从输入输出的张量的shape角度来理解,相当于一个输入为[batch_size, in_features]的张量变换成了[batch_size, out_features]的输出张量。

3.具体代码⚠️

import torch
m = torch.nn.Linear(2, 3)
input = torch.randn(4, 2)
out = m(input)
print(m.weight.shape)
print(m.bias.shape)
print(out.size())

结果如下:
在这里插入图片描述
✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️✅💖⚠️
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZZY_dl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值