批量化处理和矩阵(torch)

news2025/3/14 4:17:33

左边是权重,右边是变量 

高维可以看成二维的堆叠

总结:二维是一维的堆叠,三维是二维的堆叠。但似乎是为了引入矩阵,本来应该是左上角是第一组权重和第一组变量的乘积这种表示表示来着,最后成了和列向量乘积(即矩阵乘法必须第一个的列和第二个的行数相等,右矩阵需要转置一下),但更高维度又变了回来,所以之后更高维的维数必须一一对应。

如:(3,5,6,4)的矩阵只可以和(3,5,4,6)的矩阵相乘,每个二维矩阵一一相乘

得到(3,5,6,6)的矩阵。

这应该是为了引入矩阵计算,之后变回来是为了批量化计算

例子:

一个(6x4)的矩阵,每一行是一组权重,有6组权重

和一个(4x3)的矩阵相乘,每一列是一个一维张量,有4列张量

把6看成是批量化处理6次,再具体一点

[1,2,3,4]x[[123],123],[123],[123]]

=【123】+【246】+【369】+【4812】

一个(6x4)的矩阵和一个3x4x3的矩阵相乘

6看成批量化处理

[1,2,3,4]x[[123],123],[123],[123]](有三组),会先把[1,2,3,4]广播三遍

现在换成3x6x4的矩阵和3x4x3的矩阵,此时就是对应矩阵相乘了,得到3x6x3的矩阵

同理更高维度也一样。

 下面是我的一些推导。。。🙂🙂

一维张量和一维张量相乘,相当于权重和变量相乘,结果是一个数

数加数,0维可以直接相加,所以最后是一个0维张量

res=torch.matmul(torch.tensor([1, 2]),torch.tensor([1, 2]))
#tensor(5)  0维

二维张量和一维张量相乘,相当于多组权重和变量相乘,结果是一个一维张量。扩维

res=torch.matmul(torch.tensor([[3, 4], [1, 2]]),torch.tensor([1, 2]))
# tensor([11,  5])    torch.Size([2])

如5就是[1,2]和[1,2]对应元素相乘后相加得到的。因为俩个结果是0维,可以相加,

所以最后输出5

二维张量和二维张量相乘,相当于多组权重和多组变量相乘,结果是一个二维张量

向量+向量 ,不可以直接相加,最后是一个二维张量

 如[3,6]就是[1,2]和[[1,1],[2,2]]矩阵乘法后相加得到的

这就是矩阵乘法伢,对应元素相乘相加。

res=torch.matmul(torch.tensor([[3, 4], [1, 2]]),torch.tensor([[1, 2], [1, 2]]))
#tensor([[ 7, 14],         torch.Size([2, 2])
        [ 3,  6]])

最开始我以为应该是下面这样:

左上角是第一组权重和第一组变量的乘积

右上角是最后一组权重和第一组变量的乘积

左下角是第一组权重和最后一组变量的乘积

右下角是最后一组权重和最后一组变量的乘积

但结果表明这就是纯正的矩阵乘法,

或者也可以这么理解吧,右边一维向量时是按列来排序的,上面是简写了

res=torch.matmul(torch.tensor([3, 4]),torch.tensor([[1],[2]]))
res1=torch.matmul(torch.tensor([3, 4]),torch.tensor([1,2]))

#tensor([11])
tensor(11)

似乎确实是这样,只不过最后的结果一个是一维张量,一个是零维张量 

 一维张量和二维张量相乘

res=torch.matmul(torch.tensor([3, 4]),torch.tensor([[1, 2],[1, 2]]))
tensor([ 7, 14])
torch.Size([2])

发现确实是左侧行向量,右侧列向量。这就是简单的矩阵运算

三维张量以及更高维度的张量看成二维张量的堆叠。 

三维张量和二维张量相乘,相当于多批次(每一批次多组)的二维矩阵相乘,结果是一个三维张量

res=torch.matmul(torch.tensor([[[1, 2], [3, 4]],[[1, 2], [3, 4]]])
                        ,torch.tensor([[1, 2], [1, 2]]))
tensor([[[ 3,  6],
         [ 7, 14]],

        [[ 3,  6],
         [ 7, 14]]])
torch.Size([2, 2, 2])

二维张量和三维张量相乘,自动把二维张量扩充到对应维度的三维张量

如[3377]也就是[1234]和矩阵[1111]矩阵乘法后相加得到的


res=torch.matmul(torch.tensor([[1, 2], [3, 4]]),
        torch.tensor([[[1, 2], [1, 2]],[[1, 1], [1, 1]]]))
tensor([[[ 3,  6],
         [ 7, 14]],

        [[ 3,  3],
         [ 7,  7]]])
torch.Size([2, 2, 2])

三维张量和三维张量相乘

res=torch.matmul(torch.tensor([[[1, 2], [3, 4]],[[1, 2], [3, 4]]]),
    torch.tensor([[[1, 2], [1, 2]],[[1, 1], [1, 1]]]))

tensor([[[ 3,  6],
         [ 7, 14]],

        [[ 3,  3],
         [ 7,  7]]])
torch.Size([2, 2, 2])

矩阵加矩阵,最后是一个三维张量        

四维时:

shape=[2,1,4,5],b:shape=[1,1,5,4]相乘,输出的结果中,前两维保留的是[2,1],最终结果shape=[2,1,4,4]

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python | Leetcode Python题解之第111题二叉树的最小深度

题目: 题解: class Solution:def minDepth(self, root: TreeNode) -> int:if not root:return 0que collections.deque([(root, 1)])while que:node, depth que.popleft()if not node.left and not node.right:return depthif node.left:que.appen…

认识K8s集群的声明式资源管理方法

前言 Kubernetes 集群的声明式资源管理方法是当今云原生领域中的核心概念之一,使得容器化应用程序的部署和管理变得更加高效和可靠。本文将认识了解 Kubernetes 中声明式管理的相关理念、实际应用以及优势。 目录 一、管理方法介绍 1. 概述 2. 语法格式 2.1 管…

猫头虎 解析:为什么AIGC在国内适合做TOB,在国外适合做TOC?

猫头虎 解析:为什么AIGC在国内适合做TOB,在国外适合做TOC? 博主 猫头虎 的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面…

掩码生成蒸馏——知识蒸馏

摘要 https://arxiv.org/pdf/2205.01529 知识蒸馏已成功应用于各种任务。当前的蒸馏算法通常通过模仿教师的输出来提高学生的性能。本文表明,教师还可以通过指导学生的特征恢复来提高学生的表示能力。从这一观点出发,我们提出了掩码生成蒸馏&#xff08…

《图解支付系统设计与实现》电子书_V20240525

相较于上次公开发布的V20240503版本,变更内容如下: 根据掘金网友zz67373(李浩铭)的勘误建议,优化了部分描述。增加:金额处理规范,低代码报文网关实现完整代码,分布式流控等内容。扩…

Golang | Leetcode Golang题解之第111题二叉树的最小深度

题目&#xff1a; 题解&#xff1a; func minDepth(root *TreeNode) int {if root nil {return 0}queue : []*TreeNode{}count : []int{}queue append(queue, root)count append(count, 1)for i : 0; i < len(queue); i {node : queue[i]depth : count[i]if node.Left …

(十一)统计学基础练习题五(50道选择题)

本文整理了统计学基础知识相关的练习题&#xff0c;共50道&#xff0c;适用于想巩固统计学基础或备考的同学。来源&#xff1a;如荷学数据科学题库&#xff08;技术专项-统计学二&#xff09;。序号之前的题请看往期文章。 201&#xff09; 202&#xff09; 203&#xff09; 2…

LeetCode 第131场双周赛个人题解

100309. 求出出现两次数字的 XOR 值 原题链接 求出出现两次数字的 XOR 值 - 力扣 (LeetCode) 竞赛 思路分析 签到题&#xff0c;一次遍历 AC代码 class Solution:def duplicateNumbersXOR(self, nums: List[int]) -> int:cnt Counter(nums)res 0st set(nums)for x …

linux系统环境—基础开发工具

目录 1. yum工具&#xff0c;进行软件安装 示例&#xff1a;下载第一个软件 2. vim编辑器&#xff0c;学会vim的简单配置 vim的基本操作 vim末行模式命令集 插入模式与普通编辑器差不多。无命令集合 3. gcc/g编译器的使用&#xff0c;并了解其过程&#xff0c;原理 1预…

脚注:书籍的小秘密,躲藏在脚注间

脚注&#xff1a;书籍的小秘密&#xff0c;躲藏在脚注间 脚注是一种在文本中提供补充信息、引用出处或注解的方式&#xff0c;有助于读者更全面地理解文中内容&#xff0c;并为进一步研究提供参考和跳转点。 在一书本中&#xff0c;脚注是额外提供给读者的文字信息&#xff0…

java:static关键字用法

在静态方法中不能访问类的非静态成员变量和非静态方法&#xff0c; 因为非静态成员变量和非静态方法都必须依赖于具体的对象才能被调用。 从上面代码里看出&#xff1a; 1.静态方法不能调用非静态成员变量。静态方法test2()中调用非静态成员变量address&#xff0c;编译失败…

Java进阶学习笔记19——内部类

1、 内部类&#xff1a; 是类中五大成分之一&#xff08;成员变量、方法、构造函数、内部类、代码块&#xff09;&#xff0c;如果一个类定义在另一个 类的内部&#xff0c;这个类就是内部类。 场景&#xff1a;当一个类的内部&#xff0c;包含了一个完整的事物&#xff0c;且…

[笔试训练](三十三)097:跳台台阶扩展问题098:包含不超过两种字符的最长子串099:字符串的排列

目录 097:跳台台阶扩展问题 098:包含不超过两种字符的最长子串 099:字符串的排列 097:跳台台阶扩展问题 题目链接:跳台阶扩展问题_牛客题霸_牛客网 (nowcoder.com) 题目&#xff1a; 题解&#xff1a; 规律题: 1.跳上n级台阶的跳法等于前面1~(n-1)级台阶跳法的总和1。 2.跳…

[5] CUDA线程调用与存储器架构

CUDA线程调用与存储器架构 前几节简单讲了如何编写CUDA程序&#xff0c;利用GPU的处理能力并行执行多个线程和块。之前所有程序里的线程是相互独立的&#xff0c;没有多个线程之间的通信多是实际应用程序需要中间线程之间的通信&#xff0c;本文将仔细讲解线程调用以及CUDA的分…

Gradle的settings.gradle.kts你真的理解吗?

你还在用.gradle文件吗&#xff1f;例如build.gradle、settings.gradle&#xff0c;那么你就out了。现在我们有必要了解一下kts脚本了。在Android项目中&#xff0c;默认有3个文件可以替换成kts脚本&#xff0c;即project的build.gradle、app模块的build.gradle和project的sett…

关于在子线程中获取不到HttpServletRequest对象的问题

这篇文章主要分享一下项目里遇到的获取request对象为null的问题&#xff0c;具体是在登录的时候触发的邮箱提醒&#xff0c;获取客户端ip地址&#xff0c;然后通过ip地址定位获取定位信息&#xff0c;从而提示账号在哪里登录。 但是登录却发现获取request对象的时候报错了。 具…

数据插值之朗格朗日插值(一)

目录 一、引言 二、代码实现 2.1 Lagrange插值求插值多项式&#xff1a; 代码解析&#xff1a; 1.vpa解释 2.ploy&#xff08;x&#xff09;解释: 3.conv&#xff08;&#xff09;解释 4.poly2sym()解释 2.2 Lagrange插值求新样本值和误差估计&#xff1a; 代码解析&…

鲁教版七年级数学上册-笔记

文章目录 第一章 三角形1 认识三角形2 图形的全等3 探索三角形全等的条件4 三角形的尺规作图5 利用三角形全等测距离 第二章 轴对称1 轴对称现象2 探索轴对称的性质4 利用轴对称进行设计 第三章 勾股定理1 探索勾股定理2 一定是直角三角形吗3 勾股定理的应用举例 第四章 实数1 …

C++技能进阶指南——多态语法剖析

前言&#xff1a;多态是面向对象的三大特性之一。顾名思义&#xff0c; 多态就是多种状态。 那么是什么的多种状态呢&#xff1f; 这里的可能有很多。比如我们去买火车票&#xff0c; 有普通票&#xff0c; 学生票&#xff1b; 又比如我们去旅游&#xff0c; 有儿童票&#xff…

心链2---前端开发(整合路由,搜索页面,用户信息页开发)

心链——伙伴匹配系统 接口调试 说书人&#x1f4d6;&#xff1a;上回书说到用了两种方法查询标签1.SQL查询&#xff0c;2.内存查询&#xff1b;两种查询效率是部分上下&#xff0c;打的是难解难分&#xff0c;是时大地皴裂&#xff0c;天色聚变&#xff0c;老祖斟酌再三最后决…