【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列,也就是左右压扁。

目录
相关文章
|
1月前
|
机器学习/深度学习 算法 PyTorch
RPN(Region Proposal Networks)候选区域网络算法解析(附PyTorch代码)
RPN(Region Proposal Networks)候选区域网络算法解析(附PyTorch代码)
226 1
|
2月前
|
机器学习/深度学习 编解码 PyTorch
Pytorch实现手写数字识别 | MNIST数据集(CNN卷积神经网络)
Pytorch实现手写数字识别 | MNIST数据集(CNN卷积神经网络)
|
1月前
|
机器学习/深度学习 PyTorch 测试技术
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【PyTorch实战演练】AlexNet网络模型构建并使用Cifar10数据集进行批量训练(附代码)
【PyTorch实战演练】AlexNet网络模型构建并使用Cifar10数据集进行批量训练(附代码)
57 0
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【PyTorch实战演练】使用Cifar10数据集训练LeNet5网络并实现图像分类(附代码)
【PyTorch实战演练】使用Cifar10数据集训练LeNet5网络并实现图像分类(附代码)
60 0
|
8天前
|
机器学习/深度学习 数据可视化 PyTorch
PyTorch小技巧:使用Hook可视化网络层激活(各层输出)
这篇文章将演示如何可视化PyTorch激活层。可视化激活,即模型内各层的输出,对于理解深度神经网络如何处理视觉信息至关重要,这有助于诊断模型行为并激发改进。
11 1
|
1月前
|
机器学习/深度学习 算法 PyTorch
【PyTorch实战演练】深入剖析MTCNN(多任务级联卷积神经网络)并使用30行代码实现人脸识别
【PyTorch实战演练】深入剖析MTCNN(多任务级联卷积神经网络)并使用30行代码实现人脸识别
55 2
|
1月前
|
机器学习/深度学习 自然语言处理 PyTorch
【PyTorch实战演练】基于全连接网络构建RNN并生成人名
【PyTorch实战演练】基于全连接网络构建RNN并生成人名
23 0
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
卷积神经元网络中常用卷积核理解及基于Pytorch的实例应用(附完整代码)
卷积神经元网络中常用卷积核理解及基于Pytorch的实例应用(附完整代码)
20 0
|
1月前
|
PyTorch 算法框架/工具 Python
Pytorch构建网络模型时super(__class__, self).__init__()的作用
Pytorch构建网络模型时super(__class__, self).__init__()的作用
10 0

热门文章

最新文章