目录
创建tensor
torch与numpy相互转化
a=np.array([2,2.2])
torch.from_numpy(a)
a=torch.tensor([2.,3])
b=a.numpy()
直接创建tensor
a=torch.tensor([2.,3])
a=torch.FloatTensor([[2,5],[2.,3]])
根据数值要求:
torch.zeros(*sizes, out=None, ..)# 返回大小为sizes的零矩阵
torch.zeros_like(input, ..) # 返回与input相同size的零矩阵
torch.ones(*sizes, out=None, ..) #f返回大小为sizes的单位矩阵
torch.ones_like(input, ..) #返回与input相同size的单位矩阵
torch.full(size, fill_value, …) #返回大小为sizes,单位值为fill_value的矩阵
torch.full_like(input, fill_value, …) 返回与input相同size,单位值为fill_value的矩阵
torch.arange(start=0, end, step=1, …) #返回从start到end, 单位步长为step的1-d tensor.
torch.linspace(start, end, steps=100, …) #返回从start到end, 间隔中的插值数目为steps的1-d tensor
torch.logspace(start, end, steps=100, …) #返回1-d tensor ,从10^start到10^end的steps个对数间隔
根据矩阵要求:
torch.eye(n, m=None, out=None,…) #返回2-D 的单位对角矩阵
torch.empty(*sizes, out=None, …) #返回被未初始化的数值填充,大小为sizes的tensor
torch.empty_like(input, …) # 返回与input相同size,并被未初始化的数值填充的tensor
随机采用生成:
torch.normal(mean, std, out=None)
torch.rand(*size, out=None, dtype=None, …) #返回[0,1]之间均匀分布的随机数值
torch.rand_like(input, dtype=None, …) #返回与input相同size的tensor, 填充均匀分布的随机数值
torch.randint(low=0, high, size,…) #返回均匀分布的[low,high]之间的整数随机值
torch.randint_like(input, low=0, high, dtype=None, …) #
torch.randn(*sizes, out=None, …) #返回大小为size,由均值为0,方差为1的正态分布的随机数值
torch.randn_like(input, dtype=None, …)
torch.randperm(n, out=None, dtype=torch.int64) # 返回0到n-1的数列的随机排列
索引和切片
a=torch.rand(4,3,28,28)
维度
print(a[0].shape)
切片
print(a[:2,:1,:,:].shape)
索引
print(a.index_select(2,torch.arange(28)).shape)
维度变换
1. 改变shape
torch.reshape()、torch.view()可以调整Tensor的shape,返回一个新shape的Tensor,torch.view()是老版本的实现,torch.reshape()是最新的实现,两者在功能上是一样的。
a = torch.rand(4, 1, 28, 28)
print(a.view(4 * 1, 28, 28).shape)
print(a.reshape(4 * 1, 28, 28).shape)
大小都是4*1*28*28!!
2.增加维度
torch.unsqueeze(index)可以为Tensor增加一个维度,增加的这一个维度的位置由我们自己定义,新增加的这一个维度不会改变数据本身
a = torch.rand(4, 1, 28, 28)
print(a.unsqueeze(0).shape)
这个Tensor有4个维度,我们可以在现有维度的基础上插入一个新的维度,插入维度的index在[-a.dim()-1, a.dim()+1]范围内,并且当index>=0,则在index前面插入这个新增加的维度;当index < 0,怎在dim=0出增加
3.删减维度
删减维度实际上就是维度挤压的过程,只能删除size=1的维度
a = torch.rand(4, 1, 28, 28)
print(a.squeeze(1).shape)成功
print(a.squeeze(2).shape)失败
4.维度扩展
torch.expand()必须保证同维度,维度不足则用torch.unsqueeze(index)补充
bias = torch.rand(32)
bias = bias.unsqueeze(1).unsqueeze(2).unsqueeze(0)
bias.expand(4, -1, 14, 14)
5.维度重复
repeat就是将每个位置的维度都重复至指定的次数,以形成新的Tensor,功能与维度扩展一样,但是repeat会重新申请内存空间,repeat()参数表示各个维度指定的重复次数。
b = torch.Tensor(1, 32, 1, 1)
b=b.repeat(4,1,14,14)
print(b.shape)
输出:torch.Size([4, 32, 14, 14])
6.转置操作
tensor.t()
7.维度交换
transpose(dim1, dim2)交换dim1与dim2
permute(0, 2, 3, 1)交换对应下标维度