深度学习–数学基础(1)
*2021-04-21 22:56
在学习深度学习之前,需具备良好的数学基础,主要包括线性代数、微积分、概率论三个数学分支。
1.数据表示–标量、向量、矩阵、张量
(1)标量(scalar):标量就是一个简单的只有大小、没有方向的数字。在计算机专业技术中,标量可以通过一个固定类型的变量来表示。
(2)向量(vector):向量就是一列数,是由一组数组组成的有序数组,同时具有大小和方向,通过一个次序索引,我们可以确定每个单独的数。下面就是一个行向量: x=[x1, x2, …, xn]。
(3)矩阵(matrix):矩阵是一个二维数组,其中每个元素可以被两个索引所确定,aij表示矩阵A中第i行,第j列。
(4)张量(tensor):在深度学习中,主要讨论的坐标往往是超过两维的数组。一般地,如果一个数组中的元素分布在若干维坐标的规则网格中,我们将其称为张量。张量通过对应维度个数的索引来确定张量内部的值。
2. 张量的常见操作
在深度学习中,我们将待处理的数据规范化为特定维度的张量。例如,不进行批处理时,有如下的对应关系:
(1) 彩色图像可以看成是一个三维张量:图像的三个颜色通道(红、绿、蓝)、图像的高、图像的宽。
(2)视频可以看成是一个四维张量:视频的时间帧方向、每一帧图像的颜色通道、宽、高。
(3)三维场景可以看成一个四维张量:场景中每一点的信息编码轴、场景的高、场景的长、场景的宽。
对不同的张量有不同的运算方式,但是下面这几个操作是常用的:索引(indexing)、切片(slicing)、连接(joining)、换位(mutating)。
3. 张量的基本操作(基于PyTorch)
(1)初始化一个张量
import torch
x = torch.rand(5,3) #生成一个随机的5×3的张量x
print(x)
print(x.size()) #输出张量x的大小
输出结果为:
(2)arange,range,linspace的使用
torch.arange(start, end, step)返回一个以start为首项, 以end为尾项,以step为公差的等差数列。不包含end。
print(torch.arange(1,21,2))
运行结果:
torch.range(start, end, step)
返回一个以start为首项, 以end为尾项,以step为公差的等差数列。但是包含end。
print(torch.range(1, 21, 2))
运行结果:
torch.linspace(start, end, steps)
返回一个以start为首项, 以end为尾项,返回一个1维张量,包含在区间start和end上均匀间隔的step个点。
print(torch.linspace(1,15,5))
运行结果:
(3)张量基本运算操作
x = torch.rand(3,2)
y = torch.rand(3,2)
print(x)
print(y)
print(x+y)
print(torch.add(x,y))
print(y.add_(x))
print(y)
运行结果:
tensor([[0.2059, 0.0645],
[0.0310, 0.3479],
[0.6152, 0.1724]])
tensor([[0.0874, 0.5010],
[0.6648, 0.1793],
[0.9541, 0.7467]])
tensor([[0.2933, 0.5654],
[0.6958, 0.5271],
[1.5693, 0.9191]])
tensor([[0.2933, 0.5654],
[0.6958, 0.5271],
[1.5693, 0.9191]])
tensor([[0.2933, 0.5654],
[0.6958, 0.5271],
[1.5693, 0.9191]])
tensor([[0.2933, 0.5654],
[0.6958, 0.5271],
[1.5693, 0.9191]])
Process finished with exit code 0
a = torch.rand(3,2)
print(a)
print(a[:,1]) #支持索引操作,取第二列
print(a.size())
b=a.view(6)
print(b)
print(b.size())
运行结果:
tensor([[0.6872, 0.8567],
[0.0259, 0.6550],
[0.8212, 0.6122]])
tensor([0.8567, 0.6550, 0.6122])
torch.Size([3, 2])
tensor([0.6872, 0.8567, 0.0259, 0.6550, 0.8212, 0.6122])
torch.Size([6])
4.小结
在学习深度学习之前,需要一定的数学基础,其中张量这一概念就十分重要,可以简单的类比成矩阵或者C语言里面的数组概念,方便理解。对张量执行的一系列操作需要从实际问题出发,用到什么就学什么。下一小节将介绍Numpy的使用。
转载:https://blog.csdn.net/weixin_43981621/article/details/115984865