注: 本文主要是涉及概念知识,代码部分请移步课程主页
N维数组是主要数据结构
0-d 标量
1-d 向量
2-d 矩阵
3-d RGB图片 宽x高x通道
4-d 批量的RGB图片
5-d 视频的批量,即 批量大小x时间x宽x高x通道
创建数组 需要 形状、数据类型和元素值
访问元素:
一个元素:[1,2]
一行:[1,:]
一列:[:,1]
子区域:[1:3,1:] 第二行和第三行 第二列及之后所有
子区域:[::3,::2] 这里的3和2分别指 跳到第一个之后的第3个和第2个
ps:pytorch同样从0开始。同样也是左闭右开
代码部分:
Import torch # 而非pytorch
X = torch.arange(12)
可通过张量的shape属性访问张量的维度信息和其元素总数
X.shape
X.numel()
同样 有reshape操作 改变其形状,但不改变其数量和元素值
X = x.reshape(3,4)
创建特定张量
Torch.zeros((2,3,4))
Torch.ones((2,3,4))
可通过提供python列表或嵌套列表来给张量赋值
Torch.tensor([2,1,4,3],[1,2,3,4],[4,3,2,1])
常见的算术运算都被升级为按元素运算(+,-,*,/,**)
Totch.exp() 指数运算
张量的拼接
X = torch.arange(12,dtype=torch.float32).reshape((3,4))
Y = torch.tensor([2,1,4,3],[1,2,3,4],[4,3,2,1])
Torch.cat((X,Y), dim=0) # 堆行
Torch.cat((X,Y),dim=1) #堆列
通过逻辑运算符 构建布尔型张量
X==Y
X.sum() #去和,产生只有一个元素的张量
广播机制:个人理解:取两个张量维度最大的那两个 拼起来 需要维度相同
A = torch.arange(3).reshape((3,1))
B = torch.arange(2).reshape((1,2))
A + B
X[-1] 最后一个元素
X[1:3] 第二行和第三行
Id() 类似于c++中的指针
运行一些操作可能会导致为新结果分配内存
Before = id(Y)
Y = Y+X
Id(Y) == before
执行原地操作
Z = torch.zeros_like(Y)
Print('id(Z):', id(Z))
Z[:] = X + Y
Print('id(Z):', id(Z))
若后续操作中没有重复使用X,可用X[:] = X+Y或X+=Y 减少操作的内存开销
Before = id(X)
X += Y
Id(X) == before
转换为Numpy张量
A = X.numpy()
B = torch.tensor(A)
大小为1的张量转换为Python标量
A = torch.tensor([3.5])
A,A.item(),float(A),int(A)
python默认的浮点数格式是float64
深度学习运算时 最好用float32 速度快