Skip to content

深度学习准备知识合集

声明:本笔记参考《动手学习深度学习》

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
这样的操作会使得Y的内存分配地址重新分配(大家可以自己用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,:] #与上面的例子不同,这个是这个二、三元素数组中的所有元素对象,可以实现这些元素的批量赋值