【Pytorch神经网络基础理论篇】 04 线性代数

同学你好!本文章于2021年末编写,已与实际存在较大的偏差!

故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现,

Pytorch深度学习·理论篇(2023版)目录地址为:

CSDN独家 | 全网首发 | Pytorch深度学习·理论篇(2023版)目录本专栏将通过系统的深度学习实例,从可解释性的角度对深度学习的原理进行讲解与分析,通过将深度学习知识与Pytorch的高效结合,帮助各位新入门的读者理解深度学习各个模板之间的关系,这些均是在Pytorch上实现的,可以有效的结合当前各位研究生的研究方向,设计人工智能的各个领域,是经过一年时间打磨的精品专栏!https://v9999.blog.csdn.net/article/details/127587345欢迎大家订阅(2023版)理论篇

以下为2021版原文~~~~

1.基本概念


 

 

 

 

 

 

 

 

 

 

 2.线性代数的实现

2.1标量

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

import torchx = torch.tensor([3.0])
y = torch.tensor([2.0])x + y, x * y, x / y, x**y
(tensor([5.]), tensor([6.]), tensor([1.5000]), tensor([9.]))

2.2 向量

向量视为标量值组成的列表。我们将这些标量值称为向量的元素分量

x = torch.arange(4)
x
tensor([0, 1, 2, 3])

2.3 长度、维度、形状

与普通的Python数组一样,我们可以通过调用Python的内置len()函数来访问张量的长度。

len(x)

 4

x.shape #在这个意义上,张量的某个轴的维数就是这个轴的长度。
torch.Size([4])

 2.5 矩阵

#当调用函数来实例化张量时,我们可以通过指定两个分量 m 和 n 来创建一个形状为 m×n 的矩阵。
A = torch.arange(20).reshape(5, 4)
A
tensor([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11],[12, 13, 14, 15],[16, 17, 18, 19]])

 

A.T
tensor([[ 0,  4,  8, 12, 16],[ 1,  5,  9, 13, 17],[ 2,  6, 10, 14, 18],[ 3,  7, 11, 15, 19]])

 作为方矩阵的一种特殊类型,对称矩阵(symmetric matrix)AA等于其转置:A=A⊤A=A⊤。这里我们定义一个对称矩阵BB:

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

现在我们将B与它的转置进行比较。

B == B.T
tensor([[True, True, True],[True, True, True],[True, True, True]])

 2.6 张量

就像向量是标量的推广,矩阵是向量的推广一样。张量(本小节中的“张量”指代数对象)为我们提供了描述具有任意数量轴的nn维数组的通用方法。例如,向量是一阶张量,矩阵是二阶张量。

当我们开始处理图像时,张量将变得更加重要,图像以nn维数组形式出现,其中3个轴对应于高度、宽度,以及一个通道(channel)轴,用于堆叠颜色通道(红色、绿色和蓝色)。

X = torch.arange(24).reshape(2, 3, 4)
X
tensor([[[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11]],[[12, 13, 14, 15],[16, 17, 18, 19],[20, 21, 22, 23]]])

 2.7 张量算法的基本性质

标量、向量、矩阵和任意数量轴的张量有一些很好的属性,通常会派上用场。例如,你可能已经从按元素操作的定义中注意到,任何按元素的一元运算都不会改变其操作数的形状。同样,给定具有相同形状的任意两个张量,任何按元素二元运算的结果都将是相同形状的张量。例如,将两个相同形状的矩阵相加会在这两个矩阵上执行元素加法。

A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
B = A.clone()  # 通过分配新内存,将A的一个副本分配给B
A, A + B
(tensor([[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.],[12., 13., 14., 15.],[16., 17., 18., 19.]]),tensor([[ 0.,  2.,  4.,  6.],[ 8., 10., 12., 14.],[16., 18., 20., 22.],[24., 26., 28., 30.],[32., 34., 36., 38.]]))

A * B
tensor([[  0.,   1.,   4.,   9.],[ 16.,  25.,  36.,  49.],[ 64.,  81., 100., 121.],[144., 169., 196., 225.],[256., 289., 324., 361.]])

将张量乘以或加上一个标量不会改变张量的形状,其中张量的每个元素都将与标量相加或相乘。

a = 2
X = torch.arange(24).reshape(2, 3, 4)
a + X, (a * X).shape
(tensor([[[ 2,  3,  4,  5],[ 6,  7,  8,  9],[10, 11, 12, 13]],[[14, 15, 16, 17],[18, 19, 20, 21],[22, 23, 24, 25]]]),torch.Size([2, 3, 4]))

 2.8 张量算法的基本性质

求和:

x = torch.arange(4, dtype=torch.float32)
x, x.sum()
(tensor([0., 1., 2., 3.]), tensor(6.))

默认情况下,调用求和函数会沿所有的轴降低张量的维度,使它变为一个标量。

我们还可以指定张量沿哪一个轴来通过求和降低维度。 由于输入矩阵沿0轴降维以生成输出向量,因此输入的轴0的维数在输出形状中丢失。

一个与求和相关的量是平均值(mean或average)。我们通过将总和除以元素总数来计算平均值。在代码中,我们可以调用函数来计算任意形状张量的平均值。

A.mean(), A.sum() / A.numel()
(tensor(9.5000), tensor(9.5000))

计算平均值的函数也可以沿指定轴降低张量的维度。

A.mean(axis=0), A.sum(axis=0) / A.shape[0]
(tensor([ 8.,  9., 10., 11.]), tensor([ 8.,  9., 10., 11.]))

 2.9 非降维求和

 2.10 点积

 

 

 

 

 

 

axis=0 形状就是去掉第一个

axis=1 形状就是去掉第二个

axis=2 形状就是去掉第三个

axis=[1,2] 形状就是去掉第二个和第三个

 

 

 

 

 

QA

1.稀疏化会导致出现有一百万个列,每个列只有一个数。但是不会影响太多

2.深度学习/机器学习为什么用张量?
深度学习是机器学习的一部分,统计学家认为是计算机对数学统计的理解,所以用张量

3.copy和clone的区别:
深拷贝和浅拷贝

4.对哪一维求和 等同于消除哪一维(正确)

5.torch不区分行列向量吗?
一维张量一定是行向量
列向量是一个矩阵
可以用二位矩阵来表示行列向量。
对于计算机来说都是数组

6.稀疏的时候可以把他当做单词来做词向量,并不是每次都可以,绝大多数可以。

7.关于学习框架的选择:工具和学习应该分开,跟着时代走,跟着潮流走。应该学习怎么样开车,而不是开什么车。不要因为工具限制自己。

8.医疗图像中的 SVS格式和医生勾画的XML格式的文件如何预处理?
两种做法:其一、像素级解决,利用手写文字识别解决。其二、利用nop的形式解决,通过计算机视觉的方式。也可两个配合使用。

9.     axis = 0按照行,可以理解为把“行”给抹去只剩1行,也就是上下压扁。
        axis = 1按照列,可以理解为把“列”给抹去只剩1列,也就是左右压扁。

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

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

相关文章

Bootstrap实现弹出框和提示框效果代码

一、Bootstrap弹出框使用过JQuery UI应该知道,它里面有一个dialog的弹出框组件,功能也很丰富。与jQuery UI的dialog类似,Bootstrap里面也内置了弹出框组件。打开bootstrap 文档可以看到它的dialog是直接嵌入到bootstrap.js和bootstrap.css里面…

数据结构链表之循环链表——4

循环链表与约瑟夫问题 循环链表定义 定义:循环链表的定义十分简单,只需使一条单链表的尾部结点指向头结点,即可完成循环链表 循环链表的构建 class Node:def __init__(self, item):self.item itemself.next Nonefirst Node(aa) secon…

【Pytorch神经网络基础理论篇】 05 矩阵计算

同学你好!本文章于2021年末编写,已与实际存在较大的偏差! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)…

统计iOS项目的总代码行数的方法

1、打开终端, 2、用cd命令 定位到工程所在的目录,然后调用以下命名即可把每个源代码文件行数及总数统计出来: find . "(" -name "*.m" -or -name "*.mm" -or -name "*.cpp" -or -name "*.h&quo…

【Pytorch神经网络基础理论篇】 06 自动求导+导数与微分

同学你好!本文章于2021年末编写,已与实际存在较大的偏差! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)…

EXPORT_SYMBOL

linux2.6的“/prob/kallsyms”文件对应着内核符号表,记录了符号以及符号所在的内存地址。 模块可以使用如下宏导出符号到内核符号表: [c-sharp] view plaincopy EXPORT_SYMBOL(符号名); EXPORT_SYMBOL_GPL(符号名) 导出的符号可以被其他模块使用&…

数据结构链表之栈,Python3简单实现——5

数据结构链表之栈 栈的概述 定义:栈是一种基于先进后出(FILO)的数据结构,是一种只能在一段进行插入和删除操作的特殊线性表。引入名词:将数据存入栈的动作称为压栈,将数据取出栈的动作称为弹栈栈的特点:先进入栈的元…

【转】【Linux】linux awk命令详解

简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处…

8X25Q充电部分软件梳理(CP侧)

分享链接:http://note.youdao.com/share/?id4f6665eee6bad5ea27eee47f74bcfa4b&typenote 8X25Q充电部分软件梳理(CP侧) 作者:韦启发 目录 1、过放电池的充电阶段介绍... 2 2、Autonomous充电介绍... 5 3、USB充电器检测... 6…

【Pytorch神经网络基础理论篇】 08 Softmax 回归 + 损失函数 + 图片分类数据集

同学你好!本文章于2021年末编写,已与实际存在较大的偏差! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)…

CI Weekly #11 | 微服务场景下的自动化测试与持续部署

又一周过去了,最近我们的工程师正在搞一个“大事情” ——「flow.ci 配置文件」,稍微剧透一下,这个功能预计会在春节前上线。详情请大家关注 flow.ci Changelog 或其他官方通知:) 本期 CI Weekly 收录了的CI/CD实践、微服务自动化测试与持续部…

数据结构链表之栈——解决括号匹配问题和逆波兰表达式求值问题——6

括号匹配问题和逆波兰表达式求值问题 基于上一节已经使用python代码对栈进行了简单的实现,这一节我们在其基础上解决两个常见的问题 案例 括号匹配问题(点我直接到代码实现)逆波兰表达式求值问题(点我直接到代码实现) 括号匹配问题 在给定的字符串中&#xff0…

ubuntu server 12.04中文显示不完整

发现有台服务器ubuntu server 12.04在远程过去时文件名的中文现实没有问题,但ls的时候时间居然乱码。 搜索了一下,应该是locale的问题,可以这样处理: 1. 编辑/var/lib/locales/supported.d/local文件,内容改成如下&am…

Java_基础阶段笔记总结汇总

一、Java简介 1、Java语言平台性介绍 2、JDK_JRE_JVM的组成和作用 JVM: Java虚拟机,是专门用来运行Java程序的,但是不能单独安装 JRE: Java运行环境,包含JVM(Java虚拟机,是专门用来运行Java程序的)和核心类库 JDK: Java开发工具包,包含JRE和…

数据结构链表之队列,Python3实现——7

数据结构链表之队列 队列概述 定义:队列是一种基于先进先出(FIFO)的数据结构,队列只能在一段进行插入和删除操作的结构,第一个进入队列的元素在读取时会第一个被读取 队列可以使用顺序表(Python中列表)实现,也可以用链表实现&am…

IDEA上Debug调试全流程

一、什么是Debug模式 是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。使用IDEA的断点调试功能,查看程序的运行过程 Debug调试窗口介绍。 二、Debug模式操作流程【应用】 能够使用断点调…

数据结构链表之符号表,Python3实现——8

数据结构链表之符号表 符号表的介绍 之前章节介绍的顺序表和链表都是一个节点储存一个元素的表,但在日常生活中我们还有很多一次需要储存成对或多个值的情况,例如: 符号表最主要的目的将一对元素,用一个键和一个值将其联系起来&…

OpenCV_01 简介+无版权安装+模块分析

OpenCV是应用广泛的开源图像处理库,我们以其为基础,介绍相关的图像处理方法:包括基本的图像处理方法:几何变换,形态学变换,图像平滑,直方图操作,模板匹配,霍夫变换等&…

KMP 算法 学习 整理

我自己整理的KMP算法的PDF文件:http://pan.baidu.com/s/1o8yKIi2提取密码:8291 别的就不多说啥了,感谢来自海子 博客园的 资料-- 转载于:https://www.cnblogs.com/suishiguang/p/6285979.html

OpenCV_02 图像的基本操作:图像IO+绘制图形+像素点+属性+图像通道+色彩空间的改变

1 图像的IO操作 这里我们会给大家介绍如何读取图像,如何显示图像和如何保存图像。 1.1 读取图像 API cv.imread()参数: 要读取的图像 读取方式的标志 cv.IMREAD*COLOR:以彩色模式加载图像,任何图像的透明度都将被忽略。这是默…