深度学习准备知识合集¶
声明:本笔记参考《动手学习深度学习》
Ndarray¶
深度学习的数据类型基础就是Ndarray,很多操作都是基于n维数组展开,下面我们就给出Ndarray的基本操作(不含说明
import torch #tensor蕴含于这个库里
获取张量基本信息¶
张量包含三个基本信息:张量的生成,形状,内容物数量
x = torch.arange(12) #生成一个0 - 11的一维度顺序数组
"""
>>> tensor([0,1,2,3,4,5,6,7,8,9,10])
"""
x.shape
"""
>>> torch.Size([12])
"""
x.numel()
"""
12
"""
创建基本张量¶
创建的方法有:全0,全1,正态随机生成,直接指定生成。
x = torch.zeros((2,3,4)) # 里面填写的是shape:(2,3,4)
x = torch.ones((2,3,4)) # 同样的,里面填写的shape:(2,3,4)
x = torch.randn(2,3,4) #直接输入2,3,4 不需要shape格式!
x = torch.tensor([[2,1,4,3],[1,2,3,4],[3,2,1,4]]) #[[...],[...]] 2*2张量格式
z = torch.zeros_like(X) #转映:生成一个和 X 形状一致的全0张量
张量运算¶
注意,tensor对于基本运算符号(+,-,*,/,**
)都是按元素运算,比如说*
就不是标准的矩阵乘法。
torch.exp(x) #按元素求幂
torch.cat((X,Y),dim = 0) #按照张量的轴-0 进行张量连结,对应矩阵学中的增广矩阵的含义
X == Y #返回判按元素断结果矩阵
"""
tensor([[False, True, False, True],
[False, False, False, False],
[False, False, False, False]])
"""
X.sum() #把每个元素累加求和
减少张量运算更新的时间以及内存
Y = Y + X
id()
函数检测变化),使得时间增多、空间内存减少。
解决方案有两个:
# Way1 转映创建新变量Z
Z = torch.zeros_like(Y)
Z[:] = X + Y
# Way2 如果在后续计算中没有重复使用X
X += Y or X[:] = X + Y
访问张量中的元素¶
索引:通过索引访问张量元素,与任何Python数组一样:第一个元素的索引是0,最后一个元素索引是-1;
"""
X = tensor([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.]])
"""
X[-1] #最后张量一个元素:tensor([ 8., 9., 10., 11.])
X[1,2] #索引的是第二元素数组中的第三个元素:6
X[1:3] # 索引的是第二元素到第三元素
X[1:3,:] #与上面的例子不同,这个是这个二、三元素数组中的所有元素对象,可以实现这些元素的批量赋值