新手可理解的PyTorch线性层解析:神经网络的构建基石

目录

torch.nn子模块Linear Layers详解

nn.Identity

Identity 类描述

Identity 类的功能和作用

Identity 类的参数

形状

示例代码

nn.Linear

Linear 类描述

Linear 类的功能和作用

Linear 类的参数

形状

变量

示例代码

nn.Bilinear

Bilinear 类的功能和作用

Bilinear 类的参数

形状

变量

 示例代码

nn.LazyLinear

LazyLinear 类描述

LazyLinear 类的功能和作用

LazyLinear 类的参数

变量

cls_to_become

示例代码

总结


torch.nn子模块Linear Layers详解

nn.Identity

Identity 类描述

torch.nn.Identity 类在 PyTorch 中提供了一个占位的恒等操作符,该操作符对传入的参数不敏感。它基本上是一个通过层,不对数据进行任何改变。

Identity 类的功能和作用
  • 数据传递: 在网络中,Identity 类用作一个占位符,允许数据无修改地通过。
  • 结构保持: 在修改或调试网络结构时,可以临时替换其他层,而不改变输入和输出的形状。
  • 参数灵活性: 该类可以接受任意参数 (*args, **kwargs),但这些参数不会被使用。
Identity 类的参数
  • args (Any): 任何参数(未使用)。
  • kwargs (Any): 任何关键字参数(未使用)。
形状
  • 输入: (∗),其中 表示任意数量的维度。
  • 输出: (∗),与输入形状相同。
示例代码
import torch
import torch.nn as nn# 创建 Identity 实例
m = nn.Identity()# 输入数据
input = torch.randn(128, 20)# 通过 Identity 层
output = m(input)# 输出形状
print(output.size())  # torch.Size([128, 20])

在这个例子中,Identity 层被用作一个简单的传递层,输入和输出形状完全相同。torch.nn.Identity 类是一个非常简单但有时非常有用的工具,特别是在需要保持网络结构但又不想改变数据流的情况下。它的存在使得网络架构的调整变得更加灵活和方便。

nn.Linear

Linear 类描述

torch.nn.Linear 类在 PyTorch 中实现了一个全连接层,也被称为线性层或密集层。它对输入数据应用一个线性变换。

Linear 类的功能和作用
  • 线性变换: 对输入数据应用线性变换y=xA^{T}+b 。
  • 适用于多种网络架构: 作为神经网络中最基本的组件之一,用于构建各种复杂网络结构。
Linear 类的参数
  1. in_features (int): 每个输入样本的大小。
  2. out_features (int): 每个输出样本的大小。
  3. bias (bool): 如果设置为 False,则层不会学习附加的偏置。默认值:True。
形状
  • 输入: (∗, H_in),其中 表示任意数量的额外维度,H_inin_features
  • 输出: (∗, H_out),除最后一维外,其他维度与输入相同,H_outout_features
变量
  • weight (torch.Tensor): 形状为 (out_features, in_features) 的可学习权重。值从均匀分布 U(-k, k) 初始化,其中 k=\frac{1}{\sqrt{in\_features}} 用于初始化神经网络中 Linear (全连接) 层的权重。这里的 k 是一个根据输入特征数 (in_features) 计算出的值,用于确定权重初始化时均匀分布的范围。在这个公式中:

        in_featuresin_features 指的是输入层的特征数量。

        k 的值是 in_featuresin_features 的平方根的倒数。

  • bias (torch.Tensor): 形状为 (out_features) 的可学习偏置。如果 bias 为 True,则值从相同的均匀分布初始化。
示例代码
import torch
import torch.nn as nn# 创建 Linear 实例
m = nn.Linear(20, 30)# 输入数据
input = torch.randn(128, 20)# 前向传播
output = m(input)# 输出形状
print(output.size())  # torch.Size([128, 30])

这段代码展示了如何创建并使用 Linear 层。在这个例子中,输入数据的形状是 (128, 20)Linear 层将其转换为形状 (128, 30) 的输出。 

nn.Bilinear

torch.nn.Bilinear 类在 PyTorch 中实现了一个双线性变换层。这个层对两个不同的输入执行双线性变换,这种变换涉及到两个输入的元素乘积。

Bilinear 类的功能和作用
  • 双线性变换: 对两个输入数据 x_{1} 和 x_{2} 应用双线性变换 y=x_{1}^{T}Ax_{2}+b 。
  •  应用场景: 在某些场景下,双线性变换能够有效地建模两个不同输入之间的复杂关系,如在推荐系统、关系建模等领域。

 

Bilinear 类的参数
  1. in1_features (int): 第一个输入样本的特征大小。
  2. in2_features (int): 第二个输入样本的特征大小。
  3. out_features (int): 输出样本的特征大小。
  4. bias (bool): 如果设置为 False,则层不会学习附加偏置。默认值:True。
形状
  • 输入1: (∗, H_{in1}),其中 H_{in1} = in1_features 表示任意数量的额外维度。
  • 输入2: (∗, H_{in2}),其中 H_{in2} = in2_features
  • 输出: (∗, H_{out}),其中 H_{out} = out_features,除最后一维外,其他维度与输入形状相同。
变量
  • weight (torch.Tensor): 形状为 (out_features, in1_features, in2_features) 的可学习权重。值从均匀分布U(-k, k) 初始化,其中 k=\frac{1}{\sqrt{in\_features}} 。
  • bias (torch.Tensor): 形状为 (out_features) 的可学习偏置。如果 bias 为 True,则值从相同的均匀分布初始化。
 示例代码
import torch
import torch.nn as nn# 创建 Bilinear 实例
m = nn.Bilinear(20, 30, 40)# 输入数据
input1 = torch.randn(128, 20)
input2 = torch.randn(128, 30)# 前向传播
output = m(input1, input2)# 输出形状
print(output.size())  # torch.Size([128, 40])

这段代码展示了如何创建并使用 Bilinear 层。在这个例子中,有两个不同形状的输入数据,Bilinear 层根据这两个输入生成形状为 (128, 40) 的输出。

torch.nn.Bilinear 类是一种特殊的神经网络层,它通过将两个输入数据的特征结合起来,提供了一种模拟复杂关系的有效方式。这种层在需要考虑两组不同特征之间交互的情况下特别有用。

nn.LazyLinear

LazyLinear 类描述

torch.nn.LazyLinear 类在 PyTorch 中提供了一种“懒加载”版本的线性层(Linear)。在这个模块中,in_features(输入特征的数量)是从第一次执行前向传播时输入数据的形状推断出来的。

LazyLinear 类的功能和作用
  • 自动推断 in_features: 这个类允许用户在初始化时不指定输入特征的大小(in_features),该值会在模块第一次前向传播时自动推断。
  • 延迟初始化: 权重和偏置参数在第一次前向传播时才被初始化,之前它们是未初始化的。
  • 转换为常规 Linear 层: 一旦完成第一次前向传播,LazyLinear 模块就会变成常规的 torch.nn.Linear 模块。
LazyLinear 类的参数
  • out_features (int): 每个输出样本的大小。
  • bias (UninitializedParameter): 如果设置为 False,则层不会学习附加偏置。默认值:True。
变量
  • weight (torch.nn.parameter.UninitializedParameter): 形状为 (out_features, in_features) 的可学习权重。在第一次前向传播后,值将从均匀分布初始化。
  • bias (torch.nn.parameter.UninitializedParameter): 形状为 (out_features) 的可学习偏置。如果 bias 为 True,则值也将在第一次前向传播后从均匀分布初始化。
cls_to_become
  • 别名:Linear
示例代码
import torch
import torch.nn as nn# 创建 LazyLinear 实例
lazy_linear = nn.LazyLinear(out_features=30)# 输入数据
input = torch.randn(128, 20)  # 注意,这里没有指定 in_features# 前向传播
output = lazy_linear(input)# 输出形状
print(output.size())  # torch.Size([128, 30])

这段代码展示了如何创建并使用 LazyLinear 层。在这个例子中,初始时并不需要指定输入特征的大小,它会在第一次调用 forward 方法时自动确定。torch.nn.LazyLinear 类是一种方便的工具,特别适合于在模型设计阶段不确定输入大小的场景。它简化了模型初始化过程,允许更灵活的设计,并在确定实际输入大小后自动完成参数初始化。

总结

 本篇博客探索了 PyTorch 中 torch.nn 子模块中的几种关键线性层,包括 Identity, Linear, Bilinear, 和 LazyLinear。每个类别都被详细解析,强调了它们在神经网络中的独特角色和应用场景。从基础的 Linear 层,负责标准的线性变换,到更复杂的 Bilinear 层,用于建模两组输入特征间的交互关系,再到灵活而方便的 LazyLinear 层,自动推断输入特征大小,每种层都提供了不同的机制来处理和学习数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/323353.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么说上了金蝶、用友系统后,下一步是部署BI?

经常有些不熟悉BI工具的用户问我:金蝶、用友系统和BI工具与什么区别,为什么说上了金蝶、用友系统后,下一步就是部署BI?这两个系统工具的功能不重叠吗? 首先,要了解金蝶、用友系统和BI工具的各自作用。 金…

使用 pg_stat_statements 优化查询

使用 pg_stat_statements 优化查询 就使用量和社区规模而言,PostgreSQL 是增长最快的数据库之一,得到许多专业开发人员的支持,并得到广泛的工具、连接器、库和可视化应用程序生态系统的支持。 PostgreSQL 也是可扩展的:使用 Postg…

“晨曦记账本:筛选特定时间段内的借款信息,管理更轻松!“

晨曦记账本,为您的财务记录带来前所未有的便捷!现在,我们推出了一项新功能,让您能够轻松筛选特定时间段内的借款信息。这不仅让您更轻松地管理借款记录,还能确保您的财务数据一目了然。 首先,我们要打开晨…

【ESP32接入语言大模型之通义千问】

1. 通义千问 讲解视频: ESP32接入语言大模型之通义千问 随着人工智能技术的不断发展,自然语言处理领域也得到了广泛的关注和应用。通义千问由阿里云开发,目标是帮助用户获得准确、有用的信息,解决他们的问题和困惑,也…

湖南大学-数据库系统-2023期末考试【原题】

前言 早上11:00考完的考试,下午回来打了三把LOL之后,凭着回忆把题目重现出来了。 在复习的时候刷了15,16,17,18,19,21六年的卷子,感觉题目都差不多,但是难度…

如何保障开放网络边界安全?

针对开放式网络(办事大厅、视频网络等),如何在内部网络构建起一道安全屏障,有效解决广大用户普遍存在的无法保证网络边界完整、边界安全、公共场所终端摄像头管理、办事大厅智能设备(一体机等)管理、开放场…

Intel IGCL规格指南和示例代码

Intel IGCL规格指南和示例代码 IGCL 旨在成为用于硬件(主要是图形)所有控制方面的高级 API 的集合。它取代了传统的英特尔 CUISDK,后者过去仅发布给 OEM 和选定的客户。 IGCL 允许对显示、媒体和 3D 功能进行全局控制和调整。 相关官网地址为…

软件测试金融项目经验总结,面试题都问什么?

1、APP端/客户端接口加解密介绍 加密方式(两种): 在TCP/IP四层模型中的应用层进行加密。类似密码本,当前项目使用的是这种,可以看到所有响应内容,只是看不懂。 在TCP/IP四层模型中的运输层和应用层之间进行…

理解String 及 String.intern() 在实际中的应用

1. 首先String不属于8种基本数据类型,String是一个对象。     因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。   2. new String()和new String(“”)都是申明一个…

【linux】日志管理和分析

一、概述 在Linux系统的管理和运维中,日志文件起到至关重要的作用。它们记录了系统运行过程中的各种事件,包括系统故障、性能数据和安全事件。 二、 日志的作用和分类 日志的作用 日志文件记载了系统的生命线,利用它们可以: 1…

CentOS 7 安装 PPTP

环境: 阿里云试用机: 外网IP:114.55.80.150 内网IP:172.28.11.92 一、服务器安装 PPTP 1、安装 yum install epel-release -y 2、安装pptp yum install pptpd iptables-services -y 3、修改配置 vim /etc/pptpd.conf# 最…

LTPI协议的理解——4、LTPI链路初始化以及运行

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 LTPI协议的理解——4、LTPI链路初始化以及运行 前言状态图Link TrainingLink DetectLink SpeedLink Training Example Link ConfigurationAdvertiseConfigure & AcceptLi…