新手可理解的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 层,自动推断输入特征大小,每种层都提供了不同的机制来处理和学习数据。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设计一个LLMops的端到端业务流程需要哪些存储技术

周五晚上老哥们儿hengzi给我打电话说有没有大模型相关的存储相关的设计,答:没有现成的,后来我甩过去一个TP,PP,DDP的文档。仔细想想也对,也不对。对的是,确实是存储,但是只有显存里的存储,不对的是其实他想问的是端到端的,主要还是磁盘上的存储 然后我翻内网也没什么现…

进程、进程管理和计划任务

一、程序进程 1.1 什么是程序 是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具 用于描述进程要完成的功能,是控制进程执行的指令集 二、进程 2.1 什么是进程? 记载到内存中运行&#xff…

二进制分析平台逆向编译器:Vector 35 Binary Ninja 软件详细功能介绍

Vector 35 Binary Ninja是一款为多种架构的反汇编提供第一方支持,包括 x86、x86-64、ARMv7(带有 Thumb2)、ARMv8 (AArch64)、PowerPC、6502、Z80 和 MIPS的反编译器,Binary Ninja为二进制分析构建了最好的自动化和 API。 Vector 3…

web期末作业动态时钟UI界面毛玻璃版

效果图 html代码奉上 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthde…

Callback Hook

一、Callback Hook 函数名&#xff1a;useCallback 用于得到一个固定引用值的函数&#xff0c;通常用它进行性能优化。 useCallback: 该函数只需要传入两个参数&#xff1a;一个回调函数和一个依赖数组即可。 1.函数&#xff0c;useCallback会固定该函数的引用&#xff0c;…

UVa1402/LA3961 Robotic Sort

题目链接 本题是2007年ICPC欧洲区域赛中欧赛区的S题 题意 一个实验室里有 n 个长短不一的试管。你的任务是编写一段程序&#xff0c;用机器臂把它们按照高度从小到大的顺序排列。对于高度相同的试管&#xff0c;排序前后的相对位置应保持不变。排序方法如下图所示。 排序需要n…

多通道病虫害分子检测仪-百科科普知识

在农业科技日新月异的今天&#xff0c;病虫害防治已经成为现代农业的重要一环。为了更精准、更快速地检测和防治病虫害&#xff0c;多通道病虫害分子检测仪应运而生&#xff0c;成为守护绿色家园的"黑科技"。 WX-XC1多通道病虫害分子检测仪是一款集成了分子生物学、…

【React系列】网络框架axios库的使用

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. axios库的基本使用 1.1. 网络请求的选择 目前前端中发送网络请求的方式有很多种&#xff1a; 选择一:传统的Aj…

蓝牙技术在智能交通系统中的革新与应用

随着科技的不断进步&#xff0c;蓝牙技术已经成为智能交通系统中的一项关键技术。其无线连接和低功耗的特性为交通管理和车辆通信提供了新的解决方案。本文将深入探讨蓝牙技术在智能交通系统中的应用&#xff0c;以及其对交通效率、安全性和用户体验的积极影响。 1. 蓝牙技术在…

CodeWave智能开发平台--03--目标:应用创建--02数据模型设计

摘要 本文是网易数帆CodeWave智能开发平台系列的第05篇&#xff0c;主要介绍了基于CodeWave平台文档的新手入门进行学习&#xff0c;实现一个完整的应用&#xff0c;本文主要完成数据模型设计 CodeWave智能开发平台的05次接触 CodeWave参考资源 网易数帆CodeWave开发者社区…

JSUDO|加速度与阿里云合作云产品

电讯&#xff1a;深圳市加速度软件开发有限公司【加速度jsudo】&#xff0c;与阿里云计算有限公司&#xff08;简称“阿里云”&#xff09;达成合作&#xff0c;双方将在电商、企业管理等应用软件领域就云产品和应用软件更深层次合作。 加速度软件长期以来&#xff0c;一直与阿…

【React系列】Redux(二)中间件

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. 中间件的使用 1.1. 组件中异步请求 在之前简单的案例中&#xff0c;redux中保存的counter是一个本地定义的数据…

华为nova12系列支持超级快充 Turbo 模式,10分钟快速补电,充电省时更高效!

华为 nova12 系列带来的超级快充 Turbo 模式&#xff0c;在你需要紧急补电的时候打开&#xff0c;10分钟可以充电到60%&#xff0c;带来更快的充电速度&#xff0c;瞬间缓解充电焦虑。 使用华为超级快充 Turbo 的感受是前所未有的&#xff0c;它采用了先进的技术&#xff0c;…

Linux进程等待

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;HEART BEAT—YOASOBI 2:20━━━━━━️&#x1f49f;──────── 5:35 &#x1f504; ◀️ ⏸ ▶️ ☰ …

springboot中引入AOP切面编程

在Spring Boot 3.0中引入AOP的过程如下所示&#xff1a; 1、首先&#xff0c;确保已经添加了相关依赖。可以通过Maven或Gradle来管理项目的依赖。对于使用Maven构建的项目&#xff0c;需要将以下依赖添加到pom.xml文件中 <dependency><groupId>org.springframewo…

Sqlmap参数设置

Sqlmap参数设置 &#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388; --------------------------------------------注意---------…

潜力快刊 | 新晋中科院1区TOP,Elsevier出版社,仅1个月Accept!审稿超快!稳定扩刊中!

【SciencePub学术】本期&#xff0c;小编给大家推荐的是一本Elsevier旗下新晋中科院1区TOP综合性期刊。其详情如下&#xff1a; 期刊简介 JOURNAL OF ADVANCED RESEARCH ISSN&#xff1a;2090-1232 E-ISSN&#xff1a;2090-1224 IF&#xff08;2022&#xff09;&#x…

SurfaceView和TextureView理解相关

一、为什么要使用SurfaceView 我们知道View是通过刷新来重绘视图&#xff0c;系统通过发出VSSYNC信号来进行屏幕的重绘&#xff0c;刷新的时间间隔是16ms,如果我们可以在16ms以内将绘制工作完成&#xff0c;则没有任何问题&#xff0c;如果我们绘制过程逻辑很复杂&#xff0c;…

unity C#中Array、Stack、Queue、Dictionary、HashSet优缺点和使用场景总结

文章目录 数组 (Array)列表 (List<T>)栈 (Stack<T>)队列 (Queue<T>)链表 (LinkedList<T>)哈希表 (Dictionary<TKey, TValue>) 或 HashSet<T>集合 (Collection<T>) 数组 (Array) 优点&#xff1a; 高效访问&#xff1a;通过索引可以…

自动生成表结构screw

采用的组件 screw 操作流程&#xff1a; 1、新建springboot 项目 2、引入相关的依赖 <!-- screw核心 --><dependency><groupId>cn.smallbun.screw</groupId><artifactId>screw-core</artifactId><version>1.0.4</version><…