简单易懂的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/301479.html

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

相关文章

Mudbox 各版本安装指南

​Mudbox下载链接 https://pan.baidu.com/s/1cYcITQ7OeI5PadNdXur_bA?pwd0531 1.鼠标右击【Mudbox2024(64bit)】压缩包(win11及以上系统需先点击“显示更多选项”)【解压到 Mudbox2024(64bit)】。 2.打开解压后的文件夹,双击打开【Setup】…

cuttag和chip-seq的区别?

Cut&Tag(Cleavage Under Targets and Tagmentation)和ChIP-Seq(Chromatin Immunoprecipitation Sequencing)都是用于研究蛋白质与DNA相互作用的生物技术。它们在技术原理和应用方面有一些关键的区别。 1.ChIP-Seq测序 1.1 …

C语言scanf()函数详解

目录 1. scanf()函数简介 1.1 函数原型 1.2 头文件 1.3 返回值 1.4 参数 2.格式说明符 3.输入格式控制 关于‘ * ’赋值忽略符的例子 关于width域宽的例子 关于length长度修饰符的说明 4. 其他常见问题说明 4.1 scanf(&#xf…

【蓝桥杯软件赛 零基础备赛20周】第7周——二叉树

文章目录 1 二叉树概念2 二叉树的存储和编码2.1 二叉树的存储方法2.2 二叉树存储的编码实现2.3 二叉树的极简存储方法 3 例题4 习题 前面介绍的数据结构数组、队列、栈,都是线性的,它们存储数据的方式是把相同类型的数据按顺序一个接一个串在一起。简单的…

污水处理成套设备如何选择

污水处理是现代社会中不可或缺的一个重要环节,它涉及到环保领域,与人们的生活和健康息息相关。而污水处理成套设备的选择则显得尤为重要,因为合适的设备能够有效地解决水污染问题,提高环境质量。 在选择污水处理成套设备时&#x…

DRF-源码解析-3-权限流程:drf的权限源码解析,drf的权限流程。

一、代码的准备 视图: class TestAPIView(APIView):authentication_classes[MyJWTAuthentication]permission_classes [AdminPermission,]def get(self,request)return Respponse({code:200,msg:测试通过})路由: path(test/,views.TestAPIView.as_vi…

Weblogic安全漫谈(三)

本篇介绍coherence.jar中的漏洞利用链及后续绕过。 经历2015到2018的3年迭代后,Weblogic的黑名单逐渐完善,废掉CC反序列化更是釜底抽薪。另一方面也促使研究员去挖掘新组件新利用链,这篇介绍的就是testbnull在发现Spring写文件链后[1]&#…

spring boot支付宝沙箱环境测试支付功能

目录 一、安装支付宝支付demo 二、配置demo信息 三、配置回调地址和异步地址 四、内网穿透 (一)简介 (二)使用场景 (三)内网穿透的几个常用软件 (四)使用natapp 一、安装支付…

ckplayer如何设置键盘的方向左和方向右是快退或快进多少秒?

默认是20秒,那怎么按照自定义的配置呢? 打开文件:“.\ckplayer\js\ckplayer.js” 然后在下面的函数中修改就可以了: 下面的代码我已经修改为了按一次方向左键为快退3秒,按一次方向右键为快进5秒。 /** fastBack* 功能&…

第03章_运算符与流程控制

第03章_运算符与流程控制 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 本章专题脉络 1. 运算符(Operator) 运算符是一种特殊的符号,用以表示数据的运算、赋…

DevOps搭建(十五)-kubernetes部署项目详细步骤

1、k8s简介 k8s官网地址 https://kubernetes.io/zh-cn/docs/home/ 2、安装kuboard 详细步骤可参考官网 https://kuboard.cn/install/install-k8s.html 2.1、环境准备 至少 2 台 2核4G 的服务器。 选择v1.19,因为高版本的已经把docker给舍弃掉了。 https://k…

Vue3插件开发教程:步步指导如何编写Vue3插件

关注⬆️⬆️⬆️⬆️ 专栏后期更新更多前端内容 文章目录 Vue3 插件插件注册形式插件主要的场景使用插件Vue3 插件 插件 (Plugins) 是一种能为 Vue 添加全局功能的工具代码。 插件注册形式 一个插件可以是一个拥有 install() 方法的对象,也可以直接是一个安装函数本身。 i…

Transformer从菜鸟到新手(三)

引言 这是Transformer的第三篇文章,上篇文章中我们了解了多头注意力和位置编码,本文我们继续了解Transformer中剩下的其他组件。 下篇文章会介绍完整的训练过程。 层归一化 层归一化想要解决一个问题,这个问题在Batch Normalization的论文…

【JaveWeb教程】(1)Web前端基础:HTML+CSS入门不再难:一篇文章教你轻松搞定HTML与CSS!

目录 1. 前端开发介绍2. HTML & CSS2.1 HTML快速入门2.1.1 操作2.1.2 总结 2.2 开发工具2.3 基础标签 & 样式2.3.1 新浪新闻-标题实现2.3.1.1 标题排版2.3.1.1.1 分析2.3.1.1.2 标签2.3.1.1.2 实现 2.3.1.2 标题样式2.3.1.2.1 CSS引入方式2.3.1.2.2 颜色表示2.3.1.2.3 …

书生·浦语大模型趣味 Demo笔记及作业

文章目录 笔记作业基础作业:进阶作业: 笔记 书生浦语大模型InternLM-Chat-7B 智能对话 Demo:https://blog.csdn.net/m0_49289284/article/details/135412067书生浦语大模型Lagent 智能体工具调用 Demo:https://blog.csdn.net/m0_…

大模型日报-20240108

M(2)UGen:利用 LLM 理解和生成音乐 https://github.com/shansongliu/M2UGen M (2) UGen 模型是一种音乐理解和生成模型,能够从文本、图像、视频和音频中进行音乐问答和音乐生成,以及音乐编辑。该模型利用编码器,如用于音乐理解的…

代码随想录day60:贪心算法|84.柱状图中最大的矩形

84. Largest Rectangle in Histogram 进行优化,如果我们想获得left就给他left即可,我们只需要在求宽度的时候用到left,而没必要修改原数组。 所以给栈插入一个虚拟索引-1 思考过程: left应该为多少呢? 首先确定left是什么&#…

吴飞教授 人工智能 模型与算法 启发式搜索课件发散分析

一、文章介绍 本文是针对吴飞教授在MOOC课程 :《人工智能:模型与算法》 2.1节 启发式搜索的课前发散 在课程2.1节 启发式搜索章节中,吴飞教授以如何计算城市地图两点之间最短路径为例,重点讲授了贪婪最佳优先搜索和A*搜索算法&a…

Materialise Mimics各版本安装指南

Materialise Mimics下载链接 https://pan.baidu.com/s/1GYnAuXfbgk_n-OXLNSOt6w?pwd0531 1.鼠标右击【Materialise Mimics21】压缩包(win11及以上系统需先点击“显示更多选项”)【解压到 Materialise Mimics21】。 2.打开解压后的文件夹,鼠…

网页设计与制作web前端设计html+css+js成品。电脑网站制作代开发。vscodeDrea 【企业公司宣传网站(HTML静态网页项目实战)附源码】

网页设计与制作web前端设计htmlcssjs成品。电脑网站制作代开发。vscodeDrea 【企业公司宣传网站(HTML静态网页项目实战)附源码】 https://www.bilibili.com/video/BV1Hp4y1o7RY/?share_sourcecopy_web&vd_sourced43766e8ddfffd1f1a1165a3e72d7605