当前位置: 首页 > 科技观察

深度学习Pytorch框架Tensor张量

时间:2023-03-18 18:25:44 科技观察

1Tensor裁剪操作Tensor中元素的范围滤波常用于梯度裁剪(gradientclipping),即梯度弥散或梯度爆炸发生时对梯度的处理torch.clamp(input,min,max,out=None)→Tensor:将输入张量的每个元素钳制到区间[min,max],并在新的张量中返回结果。2Tensor的索引和数据过滤torch.where(codition,x,y):根据条件,从x和y中选出满足条件的元素,组成一个新的tensor。输入参数condition:条件限制,满足条件则选择a,否则选择b作为输出。torch.gather(input,dim,index,out=None):在指定维度上按照index赋值输出tensortorch.inex_select(input,dim,index,out=None):按照指定index赋值输出tensortorch.masked_select(input,mask,out=None):根据mask输出张量,输出为向量torch.take(input,indices):将输入视为一维张量,根据索引torch.nonzero(input,out=None):非零元素的输出坐标importtorch#torch.wherea=torch.rand(4,4)b=torch.rand(4,4)print(a)print(b)out=torch.where(a>0.5,a,b)print(out)print("torch.index_select")a=torch.rand(4,4)print(a)out=torch.index_select(a,dim=0,index=torch.tensor([0,3,2]))#dim=0按列,index取行print(out,out.shape)print("torch.gather")a=torch.linspace(1,16,16).view(4,4)print(a)out=torch.gather(a,dim=0,index=torch.tensor([[0,1,1,1],[0,1,2,2],[0,1,3,3]]))print(out)print(out.shape)#注:从0开始,0t中的第0个h列,第一列第1个,第二列第1个,第三列第一个,,等等#dim=0,out[i,j,k]=input[index[i,j,k],j,k]#dim=1,out[i,j,k]=input[i,index[i,j,k],k]#dim=2,out[i,j,k]=输入[i,j,index[i,j,k]]print("torch.masked_index")a=torch.linspace(1,16,16).view(4,4)mask=torch.gt(a,8)print(a)print(mask)out=torch.masked_select(a,mask)打印(输出)打印("torch.take")a=torch.linspace(1,16,16).view(4,4)b=torch.take(a,index=torch.tensor([0,15,13,??10]))打印(b)#torch.nonzeroprint(“torch.take”)a=torch.tensor([[0,1,2,0],[2,3,0,1]])out=torch.nonzero(a)print(out)#稀疏表示3个Tensors的组合/拼接torch.cat(seq,dim=0,out=None):根据已有维度拼接torch.stack(seq,dim=0,out=None):沿新维度连接输入张量序列。序列中的所有张量应具有相同的形状。print("torch.stack")a=torch.linspace(1,6,6).view(2,3)b=torch.linspace(7,12,6).view(2,3)print(a,b)out=torch.stack((a,b),dim=2)print(out)print(out.shape)print(out[:,:,0])print(out[:,:,1])4Tensor的切片torch.chunk(tensor,chunks,dim=0):根据某个维度平均块(最后一个可能比平均值小)torch.split(tensor,split_size_or_sections,dim=0):根据某个维度根据第二个参数给定的list或int,用于拆分tensor5Tensor变形操作transpose(input,dim0,dim1):交换两个维度某个维度torch().unsqueeze(input,dim,out=None):在指定位置添加维度,dim=-1在最后添加torch().flip(input,dims):根据张量翻转torch()给定维度.rot90(输入,k,dims):Tensor按照指定的维度和旋转次数旋转importtorcha=torch.rand(2,3)print(a)out=torch.reshape(a,(3,2))print(out)print(a)print(torch.flip(a,dims=[2,1]))print(a)print(a.shape)out=torch.rot90(a,-1,dims=[0,2])#旋转90度°顺时针print(out)print(out.shape)6张量填充操作torch.full((2,3),3.14)7张量的频谱运算(傅里叶变换)