【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.基本概念


9455f4c7cb9c4b8996d9febdf8e3790c.png

8695f040d4b54d2ea291db5ee9164eb8.png

b91a0a53faf94702a4d8b56af0eec98b.png



96fad2ac4bca4b2fb597fe3cba9dade4.png


eac9926365944690b72be5cf743abb89.png

d1903ffa679543909cfbc533869957be.png


190da64e4f584fc28292b62ec0eaaf5e.png

9ef855f2b108490ba6a6835fdf79c70c.png

77571e94b9b64a3d912db1d978126e9a.png

9444f67f2e504be79558994b5b96bc1f.png


64595e713ea64baf910a082c9eb60196.png


2.线性代数的实现


2.1标量


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


import torch
x = 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 向量


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


c92cc196169d40f9a6738a621b0316f0.png


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 矩阵


7fefd710292a43aeb3abe5b7aac4a483.png


#当调用函数来实例化张量时,我们可以通过指定两个分量 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]])

97c75d04c74148a1b74f14c5187d220d.png


A.T


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

048e3c0a1cbf4d619f2ed99569c30a3d.png


作为方矩阵的一种特殊类型,对称矩阵(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.]]))


4c6c8e3a750a4f598c85050ee4f9f65b.png


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的维数在输出形状中丢失。


d806c9efb1cd45838db98f40a1e460de.png


一个与求和相关的量是平均值(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 非降维求和


b4421fbba30248e695ad3be249e3f1f6.png


b28985c748064c3a845fca21f6b0de1d.png


2.10 点积


348566e16b944007866591a04a0e8d15.png


8a154fb0f46b4ee89a3bc6c94fbcd56f.png


b0ca18792c384394ab441cf65942644e.png

d5e96b4528fa4a79942e2d0a1e4f3231.png


0655d2f8c67e4540934bdd74d20ab2a8.png

5ec9b6e8112c4052b413adf2f424f5dd.png


df9bd65b495d4d1ab746161a7529ec83.png


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


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


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


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


3dde5a34ffba4a6ba49389b30f6f2770.png

2f2a0a1a15554d31a40d34efe717f08d.png

8b8d765304e34fbeb4881747c4c8e374.png


b80240c21b164fbcbe24c9f2a7bc9a27.png

c1605562677a4a10a873e5b0a51d7e9b.png


QA


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


2.深度学习/机器学习为什么用张量?

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


3.copy和clone的区别:

深拷贝和浅拷贝


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


5.torch不区分行列向量吗?

一维张量一定是行向量

列向量是一个矩阵

可以用二位矩阵来表示行列向量。

对于计算机来说都是数组


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


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


8.医疗图像中的 SVS格式和医生勾画的XML格式的文件如何预处理?

两种做法:其一、像素级解决,利用手写文字识别解决。其二、利用nop的形式解决,通过计算机视觉的方式。也可两个配合使用。


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

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

目录
相关文章
|
4月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch 中的动态计算图:实现灵活的神经网络架构
【8月更文第27天】PyTorch 是一款流行的深度学习框架,它以其灵活性和易用性而闻名。与 TensorFlow 等其他框架相比,PyTorch 最大的特点之一是支持动态计算图。这意味着开发者可以在运行时定义网络结构,这为构建复杂的模型提供了极大的便利。本文将深入探讨 PyTorch 中动态计算图的工作原理,并通过一些示例代码展示如何利用这一特性来构建灵活的神经网络架构。
331 1
|
4月前
|
机器学习/深度学习 人工智能 PyTorch
【深度学习】使用PyTorch构建神经网络:深度学习实战指南
PyTorch是一个开源的Python机器学习库,特别专注于深度学习领域。它由Facebook的AI研究团队开发并维护,因其灵活的架构、动态计算图以及在科研和工业界的广泛支持而受到青睐。PyTorch提供了强大的GPU加速能力,使得在处理大规模数据集和复杂模型时效率极高。
199 59
|
3月前
|
机器学习/深度学习
小土堆-pytorch-神经网络-损失函数与反向传播_笔记
在使用损失函数时,关键在于匹配输入和输出形状。例如,在L1Loss中,输入形状中的N代表批量大小。以下是具体示例:对于相同形状的输入和目标张量,L1Loss默认计算差值并求平均;此外,均方误差(MSE)也是常用损失函数。实战中,损失函数用于计算模型输出与真实标签间的差距,并通过反向传播更新模型参数。
|
4月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch代码实现神经网络
这段代码示例展示了如何在PyTorch中构建一个基础的卷积神经网络(CNN)。该网络包括两个卷积层,分别用于提取图像特征,每个卷积层后跟一个池化层以降低空间维度;之后是三个全连接层,用于分类输出。此结构适用于图像识别任务,并可根据具体应用调整参数与层数。
|
4月前
|
机器学习/深度学习 PyTorch TensorFlow
【PyTorch】PyTorch深度学习框架实战(一):实现你的第一个DNN网络
【PyTorch】PyTorch深度学习框架实战(一):实现你的第一个DNN网络
188 1
|
4月前
|
机器学习/深度学习 人工智能 PyTorch
AI智能体研发之路-模型篇(五):pytorch vs tensorflow框架DNN网络结构源码级对比
AI智能体研发之路-模型篇(五):pytorch vs tensorflow框架DNN网络结构源码级对比
83 1
|
4月前
|
机器学习/深度学习 PyTorch 测试技术
深度学习入门:使用 PyTorch 构建和训练你的第一个神经网络
【8月更文第29天】深度学习是机器学习的一个分支,它利用多层非线性处理单元(即神经网络)来解决复杂的模式识别问题。PyTorch 是一个强大的深度学习框架,它提供了灵活的 API 和动态计算图,非常适合初学者和研究者使用。
56 0
|
6月前
|
并行计算 PyTorch 程序员
老程序员分享:Pytorch入门之Siamese网络
老程序员分享:Pytorch入门之Siamese网络
110 0
|
6月前
|
机器学习/深度学习 算法 PyTorch
【从零开始学习深度学习】50.Pytorch_NLP项目实战:卷积神经网络textCNN在文本情感分类的运用
【从零开始学习深度学习】50.Pytorch_NLP项目实战:卷积神经网络textCNN在文本情感分类的运用
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】

热门文章

最新文章