深度学习-线性代数

目录

  • 标量
  • 向量
  • 矩阵
    • 特殊矩阵
    • 特征向量和特征值
  • 标量由只有一个元素的张量表示
  • 将向量视为标量值组成的列表
  • 通过张量的索引来访问任一元素
  • 访问张量的长度
  • 只有一个轴的张量,形状只有一个元素
  • 通过指定两个分量m和n来创建一个形状为m×n的矩阵
  • 矩阵的转置
  • 对称矩阵的转置逻辑运算
  • clone()复制一个有相同形状的张量
  • 两个矩阵的按元素乘法称为:哈达玛积⊙
  • 计算元素的和
  • 表示任意形状张量的元素和
    • 参数axis=0求和
    • 参数axis=1求和
    • axis=[0,1] 必须满足三个维度以上
    • 示例说明1
    • 示例说明2
    • 示例说明3
  • 平均值(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]))

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

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

示例说明1

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

显示:在这里插入图片描述


这里我们使用axis=0沿行方向求和(会丢失第一维度):

import torch
a = torch.arange(20).reshape((5, 4))
print(a.sum(axis=0).shape)

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


这里我们使用axis=1沿列方向求和(会丢失第二维度):

import torch
a = torch.arange(20).reshape((5, 4))
print(a.sum(axis=1).shape)

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


示例说明2

import torch
a = torch.arange(40).reshape((2, 5, 4))
print(a.shape)

显示:在这里插入图片描述


这里我们使用axis=0沿块/层方向求和(会丢失第一维度):

import torch
a = torch.arange(40).reshape((2, 5, 4))
print(a.sum(axis=0).shape)

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



这里我们使用axis=1沿行方向求和(会丢失第二维度):

import torch
a = torch.arange(40).reshape((2, 5, 4))
print(a.sum(axis=1).shape)

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


这里我们使用axis=2沿列方向求和(会丢失第三维度):

import torch
a = torch.arange(40).reshape((2, 5, 4))
print(a.sum(axis=2).shape)

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


这里我们使用axis=[1, 2]沿行和列方向求和(会丢失第二、三维度):

import torch
a = torch.arange(40).reshape((2, 5, 4))
print(a.sum(axis=[1, 2]).shape)

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


这里我们可以发现是先按照行方向求和计算,之后根据行方向计算的结果进行列方向求和计算。

import torch
a = torch.arange(40).reshape((2, 5, 4))
print(a)
print(a.sum(axis=1))
print(a.sum(axis=[1, 2]))
print(a.sum(axis=[1, 2]).shape)

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



示例说明3

keepdim=True使其不丢失维度,将维度变为1

import torch
a = torch.arange(40).reshape((2, 5, 4))
print(a.sum(axis=1, keepdims=True).shape)

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


import torch
a = torch.arange(40).reshape((2, 5, 4))
print(a.sum(axis=[1, 2], keepdims=True).shape)

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




平均值(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))))

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

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

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

相关文章

【LLMOps】小白详细教程,在Dify中创建并使用自定义工具

文章目录 博客详细讲解视频点击查看高清脑图 1. 搭建天气查询http服务1.1. flask代码1.2. 接口优化方法 2. 生成openapi json schema2.1. 测试接口2.2. 生成openapi schema 3. 在dify中创建自定义工具3.1. 导入schema3.2. 设置工具认证信息3.3. 测试工具 4. 调用工具4.1. Agent…

【JavaWeb】Day51.Mybatis动态SQL(一)

什么是动态SQL 在页面原型中,列表上方的条件是动态的,是可以不传递的,也可以只传递其中的1个或者2个或者全部。 而在我们刚才编写的SQL语句中,我们会看到,我们将三个条件直接写死了。 如果页面只传递了参数姓名name 字…

Multitouch 1.27.28 免激活版 mac电脑多点触控手势增强工具

Multitouch 应用程序可让您将自定义操作绑定到特定的魔术触控板或鼠标手势。例如,三指单击可以执行粘贴。通过执行键盘快捷键、控制浏览器的选项卡、单击鼠标中键等来改进您的工作流程。 Multitouch 1.27.28 免激活版下载 强大的手势引擎 精心打造的触控板和 Magic …

iOS 模拟请求 (本地数据调试)

简介 在iOS 的日常开发中经常会遇到一下情况:APP代码已编写完成,但后台的接口还无法使用,这时 APP开发就可能陷入停滞。此时iOS 模拟请求就派上用场了,使用模拟请求来调试代码,如果调试都通过了,等后台接口…

迁移学习基础知识

简介 使用迁移学习的优势: 1、能够快速的训练出一个理想的结果 2、当数据集较小时也能训练出理想的效果。 注意:在使用别人预训练的参数模型时,要注意别人的预处理方式。 原理: 对于浅层的网络结构,他们学习到的…

matplotlib绘图

matplotlib版本:3.7.5 numpy版本:1.24.3 pandas版本:2.0.3 导包构造数据 import matplotlib.pyplot as plt import numpy as np import pandas as pd# %matplotlib inlinea np.linspace(0, 2 * np.pi, 100) asin np.sin(a) acos np.cos(…

c++理论篇(一) ——浅谈tcp缓存与tcp的分包与粘包

介绍 在网络通讯中,Linux系统为每一个socket创建了接收缓冲区与发送缓冲区,对于TCP协议来说,这两个缓冲区是必须的.应用程序在调用send/recv函数时,Linux内核会把数据从应用进程拷贝到socket的发送缓冲区中,应用程序在调用recv/read函数时,内核把接收缓冲区中的数据拷贝到应用…

Bert语言大模型基础

一、Bert整体模型架构 基础架构是transformer的encoder部分,bert使用多个encoder堆叠在一起。 主要分为三个部分:1、输入部分 2、注意力机制 3、前馈神经网络 bertbase使用12层encoder堆叠在一起,6个encoder堆叠在一起组成编码端&#xf…

CSS——前端笔记

CSS 1、选择器1.1、基础选择器1.2、复合选择器1.2.4、伪类选择器 1.3、属性选择器1.4、结构伪类选择器1.5、伪元素选择器 2、CSS的元素显示模式2.1、块元素2.2、行内元素2.3、行内块元素2.4、元素显示模式转换 3、字体属性3.1、font-family 字体3.2、font-size 字体大小3.3、fo…

vue echarts 柱状图 堆叠柱状图

echarts堆叠柱状图&#xff08;效果图在文章末尾&#xff09; 1、默认只显示 月度的 数据&#xff0c;手动点击 legend 季度的 数据才会显示&#xff1b; 2、监听左侧菜单栏的宽度变化&#xff0c;图表宽度自适应展示 <template><div><div id"barChart&q…

Java学习1:java入门

java入门 1.介绍Java java——sun公司——被甲骨文收购 一开始叫Oak&#xff0c;后期改名为java; java之父詹姆斯高斯林 企业级应用开发 JavaSE JavaEE JavaME 高级编程语言 2.搭建开发环境 JDK8&#xff0c;JDK11&#xff0c;JDK17————>LTS长期支持版 ps:在…

【Linux】基础指令

文章目录 基础指令1. pwd 指令2. cd 指令3. ls 指令4. touch 指令5. mkdir 指令6. rmdir 和 rm 指令7. man 指令8. cp 指令9. mv 指令10. cat 指令11. more 和 less 指令12. head 和 tail 指令13. date 指令14. cal 指令15. find 指令16. grep 指令18. zip 和 unzip 指令19. ta…

IPv4 NAT(含Cisco配置)

IPv4 NAT&#xff08;含Cisco配置&#xff09; IPv4私有空间地址 类RFC 1918 内部地址范围前缀A10.0.0.0 - 10.255.255.25510.0.0.0/8B172.16.0.0 - 172.31.255.255172.16.0.0/12C192.168.0.0 - 192.168.255.255192.168.0.0/16 这些私有地址可在企业或站点内使用&#xff0c…

jupyter notebook设置代码自动补全

jupyter notebook设置代码自动补全 Anaconda Prompt窗口执行 pip install jupyter_contrib_nbextensionsjupyter contrib nbextensions install --userpip install jupyter_nbextensions_configuratorjupyter nbextensions_configurator enable --user按如下图片设置 卸载jed…

创建Vue3项目遇到的问题 - TypeError: (0 , import_node_util.parseArgs) is not a function

印象中想要创建vue3项目&#xff0c;需要安装16.0或更高版本的Node.js&#xff0c;于是第一步检查现在所用node版本。 显示 v16.20.0。前置条件符合&#xff0c;开始愉快的创建项目。npm init vuelatest&#xff0c;报错了。 查了一下&#xff0c;发现官网已经改成了需要18.3或…

AI赋能分层模式,解构未来,智领风潮

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自热榜文章&#x1f525;&#xff1a;探索设计模式的魅力&#xff1a;AI赋能分…

Elasticsearch集群部署(Linux)

1. 准备环境 这里准备三台Linux虚拟机&#xff0c;用于配置Elasticsearch集群和部署可视化工具Kibana。 角色IP域名集群名称节点名称版本操作系统ES192.168.243.100linux100cluster-eses-node-1007.12.0CentOS 7192.168.243.101linux101cluster-eses-node-101192.168.243.102…

决策树模型示例

通过5个条件判定一件事情是否会发生&#xff0c;5个条件对这件事情是否发生的影响力不同&#xff0c;计算每个条件对这件事情发生的影响力多大&#xff0c;写一个决策树模型pytorch程序,最后打印5个条件分别的影响力。 一 决策树模型是一种非参数监督学习方法&#xff0c;主要…

数据结构习题--旋转链表

数据结构习题–旋转链表 给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。注意这里的k可能超过链表的长度 方法&#xff1a;双指针 分析 旋转K次&#xff0c;我们其实就是相当于找到倒数第K个结点&#xff0c;让其成为头结点…

ArcGIS无法开始编辑TIN!开始编辑TIN显示灰色

ArcGIS无法开始编辑TIN&#xff01;开始编辑TIN显示灰色&#xff1f; 解决方案&#xff01; 1、确认自定义——扩展模块中空间分析、3D分析模块勾选。 2、确认以上后&#xff0c;还是不能编辑的话&#xff0c;我们可以调出 3D分析分析工具条&#xff0c;你就会发现。TIN编辑工…