pytorch数据运算1

注: 本文主要是涉及概念知识,代码部分请移步课程主页

 

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))

pytorch数据运算1_第1张图片

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  速度快

你可能感兴趣的:(动手学深度学习-沐神-笔记)