1. 知识点(数据操作)
在这一节中,我们主要学习到了如何创建张量、大小重组、广播机制、张量转数组、数组转张量、以及内存节省操作。
[1]. 创建张量
import torch
A=torch.tensor([1,2,3])
print(A)
[2]. 大小重组
A.reshape(3,1)#这个函数并不会改变原有的张量A
[3]. 张量转数组
B=A.numpy()
print(B,type(B))
[4]. 数组转张量
c=np.arange(0,12).reshape(3,4)
# print(c)
d=torch.from_numpy(c)
print(d)
[5]. 广播机制
关于广播机制更多内容点击此处
本质:是用来处理两个形状不同的张量
当然也不是所有张量之间都可以进行广播机制,这其中也是有规则的。
5.1 两个张量都至少有一个维度
#像下面这种情况下就不行,因为x不满足这个条件。
x=torch.empty((0,))
y=torch.empty(2,2)
3.2 按从右往左顺序看两个张量的每一个维度,x和y每个对应着的两个维度都需要能够匹配上。什么情况下算是匹配上了?满足下面的条件就可以:
a.这两个维度的大小相等
b. 某个维度 一个张量有,一个张量没有
c.某个维度 一个张量有,一个张量也有但大小是1
如下举例:
x=torch.empty(5,3,4,1)
y=torch.empty( 3,1,1)
如上面代码中,首先将两个张量维度向右靠齐,从右往左看,两个张量第四维大小相等,都为1,满足上面条件a;第三个维度大小不相等,但第二个张量第三维大小为1,满足上面条件b;第二个维度大小相等都为3,满足上面条件a;第一个维度第一个张量有,第二个张量没有,满足上面条件b,因此两个张量每个维度都符合上面广播条件,因此可以进行广播。
两个张量维度从右往左看,如果出现两个张量在某个维度位置上面,维度大小不相等,且两个维度大小没有一个是1,那么这两个张量一定不能进行广播。
步骤:
x=torch.empty(5,3,4,1)
y=torch.empty(1,3,1,1)
x=torch.empty(5,3,4,1)
y=torch.empty(5,3,4,1)
x=torch.empty(5,3,4,1)
y=torch.empty(5,3,4,1)
[6]. 内存节省
执行原地操作非常简单。 我们可以使用切片表示法将操作的结果分配给先前分配的数组,例如Y[:] = 。 为了说明这一点,我们首先创建一个新的矩阵Z,其形状与另一个Y相同, 使用zeros_like来分配一个全
的块。
Z = torch.zeros_like(Y)
print('id(Z):', id(Z))
Z[:] = X + Y
print('id(Z):', id(Z))