深度学习-线性代数

目录

  • 标量
  • 向量
  • 矩阵
    • 特殊矩阵
    • 特征向量和特征值
  • 标量由只有一个元素的张量表示
  • 将向量视为标量值组成的列表
  • 通过张量的索引来访问任一元素
  • 访问张量的长度
  • 只有一个轴的张量,形状只有一个元素
  • 通过指定两个分量m和n来创建一个形状为m×n的矩阵
  • 矩阵的转置
  • 对称矩阵的转置逻辑运算
  • clone()复制一个有相同形状的张量
  • 两个矩阵的按元素乘法称为:哈达玛积⊙
  • 计算元素的和
  • 表示任意形状张量的元素和
    • 参数axis=0求和
    • 参数axis=1求和
    • axis=[0,1] 必须满足三个维度以上
  • 平均值(mean或average)
  • 计算总和或均值时保持轴数不变(即维度不丢失)使用keepdim=True
    • keepdim=True保持唯一,不丢失求和的维度,然后才能使用广播机制
  • 某个轴计算A元素的累积和(即前缀和)
  • 点积dot(参数1,参数2)
  • 矩阵向量积torch.mv(参数1,参数2)
  • 矩阵乘法
  • norm()函数
  • 向量元素的绝对值之和
  • F范式:矩阵元素的平方和的平方根

标量

在这里插入图片描述




向量

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

矩阵

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述

特殊矩阵

在这里插入图片描述
在这里插入图片描述

特征向量和特征值

在这里插入图片描述




标量由只有一个元素的张量表示

import torch
x = torch.tensor([3.0])
y = torch.tensor([2.0])
print(x + y)
print(x * y)
print(x / y)
print(x ** y)

结果:在这里插入图片描述




将向量视为标量值组成的列表

import torch
x = torch.arange(4)
print(x)

结果:在这里插入图片描述




通过张量的索引来访问任一元素

import torch
x = torch.arange(4)
print(x[3])

结果:在这里插入图片描述




访问张量的长度

import torch
x = torch.arange(4)
print(len(x))

结果:在这里插入图片描述




只有一个轴的张量,形状只有一个元素

import torch
x = torch.arange(4)
print(x.shape)

结果:在这里插入图片描述
一个长为1的列表




通过指定两个分量m和n来创建一个形状为m×n的矩阵

import torch
A = torch.arange(20).reshape((5, 4))
print(A)

结果:在这里插入图片描述




矩阵的转置

import torch
A = torch.arange(20).reshape((5, 4))
print(A.T)

结果:在这里插入图片描述




对称矩阵的转置逻辑运算

import torch
B = torch.tensor([[1, 2, 3], [2, 0, 4], [3, 4, 5]])
print(B == B.T)

结果:
在这里插入图片描述




clone()复制一个有相同形状的张量

import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
B = A.clone()
print(A)
print(A + B)

结果:
在这里插入图片描述




两个矩阵的按元素乘法称为:哈达玛积⊙

import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
B = A.clone()
print(A*B)

结果:
在这里插入图片描述

import torch
a = 2 #对矩阵中的每个元素+2
x = torch.arange(24).reshape(2, 3, 4) #reshape第一个参数可以看作是“块”或“层”的数量
print(x)
print(a + x)
print((a * x).shape)

结果:
在这里插入图片描述

print(a * x)

在这里插入图片描述




计算元素的和

import torch
x = torch.arange(4, dtype=torch.float32)
print(x)
print(x.sum())

结果:
在这里插入图片描述




表示任意形状张量的元素和

import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
print(A.shape)
print(A.sum())

结果:

在这里插入图片描述

参数axis=0求和

如果是二维则代表沿着行的方向(第一维)进行操作(从上到下)

import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
A_sum_axis0 = A.sum(axis=0) 
print(A)
print(A_sum_axis0)
print(A_sum_axis0.shape)

结果:
在这里插入图片描述


参数axis=1求和

如果是二维则代表沿着列的方向(第二维)进行操作(从左到右)

import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
A_sum_axis1 = A.sum(axis=1) 
print(A)
print(A_sum_axis1)
print(A_sum_axis1.shape)

结果:
在这里插入图片描述


axis=[0,1] 必须满足三个维度以上

对于三维及三维以上的,三个参数分别代表块/层方向(第一维度)、行方向(第二维度)、列方向(第三维度)
此时,就跟二维的有所区别

二维的:axis=0即第一维度------按行方向操作
        axis=1即第二维度------按列方向操作


三维即三维以上的:
         axis=0 即第一维度------按块/层方向操作
         axis=1 即第二维度------按行方向操作
         axis=2 即第三维度------按列方向操作

示例说明:
在这里插入图片描述





import torch
A = torch.arange(20*2, dtype=torch.float32).reshape(2, 5, 4)
print(A)
print(A.sum(axis=[0, 1]))

结果:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
然后,第一层和第二层求和可得:
在这里插入图片描述

平均值(mean或average)

import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
print(A.mean())
print(A.sum()/A.numel())

结果:
在这里插入图片描述




import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
print(A)
print(A.mean(axis=0))

结果:
在这里插入图片描述




import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
print(A)
print(A.sum(axis=0)/A.shape[0]) #求和的那个维度丢掉了,即按行方向的维度丢掉了

结果:
在这里插入图片描述
A.shape[0]表示第一个维度(行方向)的元素数
所以用A.shape[1]测试一下是不是元素数

import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
print(A)
print(A.sum(axis=1)/A.shape[1]) #求和的那个维度丢掉了,即按列方向的维度丢掉了

在这里插入图片描述




计算总和或均值时保持轴数不变(即维度不丢失)使用keepdim=True

import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
sum_A = A.sum(axis=1, keepdim=True)
print(sum_A)

结果:

在这里插入图片描述
当调用.sum()方法(或类似的聚合方法,如.mean()、.max()等)时,你可以选择是否保持被聚合维度的形状。keepdim=True是一个参数,当设置为True时,它会使得聚合操作后的张量在被聚合的维度上仍然保持一个大小为1的维度,而不是完全去除这个维度。

keepdim=True保持唯一,不丢失求和的维度,然后才能使用广播机制

import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
sum_A = A.sum(axis=1, keepdim=True)
print(A)
print(sum_A)
print(A/sum_A)

在这里插入图片描述




某个轴计算A元素的累积和(即前缀和)

累积和的意思是,对于每个位置,你会将该位置及其之前所有位置上的元素相加。第一个位置的元素保持不变(因为没有之前的元素可以相加),之后的每个位置的元素都是它自身和它之前所有元素的和。

import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
print(A.cumsum(axis=0))

结果:
在这里插入图片描述




点积dot(参数1,参数2)

torch.dot只能对一维向量做点积

import torch
x = torch.arange(4, dtype=torch.float32)
print(x)
y = torch.ones(4, dtype=torch.float32)
print(y)
print(torch.dot(x, y))

结果:
在这里插入图片描述




矩阵向量积torch.mv(参数1,参数2)

在这里插入图片描述
A是一个m×n的矩阵,x是一个n×1的一列,所以得到一个m的列向量。
m列中第i个元素是点积 a i T a_i^T aiTx

import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
x = torch.arange(4, dtype=torch.float32)
print(A.shape)
print(x.shape)
print(torch.mv(A, x))

结果:
在这里插入图片描述




矩阵乘法

矩阵乘法可以看作执行n次矩阵的向量积,然后拼接在一块,形成一个m×n的矩阵。
A:m×q的矩阵
B:q×n的矩阵
AB:m×n的矩阵

import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
B = torch.ones(4, 3)
print(torch.mm(A, B))

结果:
在这里插入图片描述




norm()函数

第二范数是向量元素平方和的平方根
在这里插入图片描述

import torch
u = torch.tensor([3.0, -4.0])
print(torch.norm(u))

结果:在这里插入图片描述




向量元素的绝对值之和

在这里插入图片描述

import torch
u = torch.tensor([3.0, -4.0])
print(torch.abs(u).sum())

结果:在这里插入图片描述




F范式:矩阵元素的平方和的平方根

在这里插入图片描述

import torch
print(torch.norm(torch.ones((4, 9))))

结果:在这里插入图片描述

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

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

相关文章

[MYSQL索引优化] 分页查询优化

这里一共介绍两种常见的分页索引优化技巧,let go! 示例表: CREATE TABLE t_product (id int(0) NOT NULL,pname varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,price double(7, 2) NULL DEFAULT 0.00,promoteSales varchar(200) CHARA…

Linux进程详解三:进程状态

文章目录 进程状态Linux下的进程状态运行态-R阻塞态浅度休眠-S深度睡眠-D暂停状态-T暂停状态-t 终止态僵尸-Z死亡-X 孤儿进程 进程状态 进程的状态,本质上就是一个整型变量,在task_struct中的一个整型变量。 状态的存在决定了你的后续行为动作。 Linu…

DRF: 序列化器、View、APIView、GenericAPIView、Mixin、ViewSet、ModelViewSet的源码解析

前言:还没有整理,后续有时间再整理,目前只是个人思路,文章较乱。 注意路径匹配的“/” 我们的url里面加了“/”,但是用apifox等非浏览器的工具发起请求时没有加“/”,而且还不是get请求,那么这…

C++字符串中单词的提取以及按符号分隔

句子中的单词提取利用stringstream即可 如果要分割需配合getline使用 两者前提都是要先转化为字符串流。

Linux套接字编程详解

Linux套接字编程 预备知识IP地址和MAC地址套接字结构网络字节序 UDP套接字编程服务端代码客服端代码 TCP 套接字守护进程 计算器模块1 日志头文件序列化和反序列化 预备知识 IP地址和MAC地址 MAC地址用来在局域网中标识唯一主机 Ip地址用于在广域网中标识唯一主机 &#xff0…

李廉洋:4.24-4.25现货黄金,WTI原油区间震荡,走势分析。

黄金消息面分析:金银近日回调。随着伊朗方面淡化以色列最新反击,中东地区局势没有进一步发酵下,风险溢价下降金银出现较大幅度调整。由于近期高于预期的通胀数据,降息预期持续降温。昨日疲软的美国PMI以及以色列在加沙攻击的加剧支…

【Unity】AssetBundle加载与卸载

unity官方apiAssetBundle-LoadFromFileAsync - Unity 脚本 API 异步加载AB包 using UnityEngine; using System.Collections; using System.IO;public class LoadFromFileAsyncExample : MonoBehaviour {IEnumerator Start(){var bundleLoadRequest AssetBundle.LoadFromFil…

消息服务应用1——java项目使用websocket

在当前微服务项目中,由于业务模块众多,消息服务的使用场景变得异常活跃。而WebSocket由于其自身的可靠性强,实时性好,带宽占用更小的优势,在实时通讯应用场景中独占鳌头,加上HTML5标准的普及流行&#xff0…

OpenCompass 大模型评测实战——笔记

OpenCompass 大模型评测实战——笔记 一、评测1.1、为什么要做评测1.2、如何通过能力评测促进模型发展1.2.1、面向未来拓展能力维度1.2.2、扎根通用能力1.2.3、高质量1.2.4、性能评测 1.3、评测的挑战1.3.1、全面性1.3.2、评测成本1.3.3、数据污染1.3.4、鲁棒性 二、OpenCompas…

java-junit单元测试

问题 Junit框架 代码 工具类 // 工具类 public class StringUtils {// 获取字符串的最大下标public static int getMaxIndex(String str){// 这个地方是有问题的,应该是str.length() - 1 也没有进行str是否为空的判断return str.length() ;} }测试类 测试类类名&…

vcontact2:病毒聚类(失败)

Bitbucket 安装 mamba create --name vContact2 biopython1.78 mamba install -c bioconda vcontact20.11.3vim ~/envs/vContact2/lib/python3.9/site-packages/vcontact2/exports/summaries.py 把 np.warnings.filterwarnings(ignore) 改成 import warnings warnings.filte…

递归、搜索与回溯算法:FloodFill 算法

例题一 算法思路: 可以利⽤「深搜」或者「宽搜」,遍历到与该点相连的所有「像素相同的点」,然后将其修改成指定的像素即可。 全局变量: int dx[4] { 0,0,1,-1 }, dy[4] { 1,-1,0,0 }; int m, n; int precolor;//记录原先的颜色…

【Linux】日志分析与管理

作为一个运维,如果不会看日志,就好比是冬天刚刚用热水泡完了脚,接着就立马让人把水喝掉。 目录 一、Inode介绍 1.1 什么是inode 1.2 inode表内容 1.3 查看inode号的方式 二、日志分析 2.1 日志的用途 2.2 日志的分类 2.3 日志级别 2…

Flink学习(七)-单词统计

前言 Flink是流批一体的框架。因此既可以处理以流的方式处理,也可以按批次处理。 一、代码基础格式 //1st 设置执行环境 xxxEnvironment env xxxEnvironment.getEnvironment;//2nd 设置流 DataSource xxxDSenv.xxxx();//3rd 设置转换 Xxx transformation xxxDS.…

简述MASM宏汇编

Hello , 我是小恒不会java。今天写写x86相关底层的东西 寄存器 8086由BIU和EU组成 8088/8086寄存器有14个。8通用,4段,1指针,1标志 8个通用寄存器:这些寄存器可以用来存储任意类型的数据,包括整数、地址等。8086有8个…

Modbus转Profinet网关接电表与工控机通讯

Modbus转Profinet网关(XD-MDPN100/300)的主要功能是实现Modbus协议和Profinet协议之间的转换和通信。Modbus转Profinet网关集成了Modbus和Profinet两种协议,支持Modbus RTU主站/从站,并可以与RS485接口的设备,如变频器…

找对方法,单位信息宣传工作向媒体投稿其实也简单

曾经,作为一名肩负单位信息宣传重任的我,每当面对那堆叠如山的稿件与闪烁不定的电脑屏幕,心中总会涌起一股无尽的焦虑与疲惫。尤其在向媒体投稿这个环节,我仿佛陷入了一个难以挣脱的漩涡,邮箱投稿的艰辛、审核的严苛、出稿的迟缓以及成功发表的少之又少,如同一座座无形的大山压…

力扣面试 150二叉搜索树迭代器 中序遍历 栈模拟递归 步骤拆分

Problem: 173. 二叉搜索树迭代器 思路 &#x1f469;‍&#x1f3eb; 三叶 复杂度 时间复杂度: O ( 1 ) O(1) O(1) 空间复杂度: O ( h ) O(h) O(h) Code class BSTIterator { Stack<TreeNode> d new Stack<>();public BSTIterator(TreeNode root){dfsLe…

书生·浦语大模型第二期实战营第七节-OpenCompass 大模型评测实战 笔记和作业

来源&#xff1a; 视频教程&#xff1a;https://www.bilibili.com/video/BV1Pm41127jU/?spm_id_from333.788&vd_sourcef4a51f7f5a63e756f73ad0dff318c1a3 文字教程&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/opencompass/readme.md 作业来源&#x…

day12 过一遍Nestjs框架(java转ts全栈/3R教室)

介绍&#xff1a;NestJS是Ts技术栈的后端框架&#xff0c;相当于Java中的springboot。 学习方法&#xff1a;与java技术体系进行对比学习。学习目标&#xff1a;nest相关知识也是挺多&#xff0c;但对比学spring的时候&#xff0c;大部分在项目生产中都是套路化的&#xff0c;大…