Pytorch | Tensor张量

点击上方“机器学习与生成对抗网络”,关注星标

获取有趣、好玩的前沿干货!

来源:知乎—秦一

地址:https://zhuanlan.zhihu.com/p/399350505


01

Tensor的裁剪运算

对Tensor中的元素进行范围过滤

常用于梯度裁剪(gradient clipping),即在发生梯度离散或者梯度爆炸时对梯度的处理

torch.clamp(input, min, max, out=None) → Tensor:将输入input张量每个元素的夹紧到区间 [min,max],并返回结果到一个新张量。

Pytorch | Tensor张量_第1张图片


02

Tensor的索引与数据筛选

torch.where(codition,x,y):按照条件从x和y中选出满足条件的元素组成新的tensor,输入参数condition:条件限制,如果满足条件,则选择a,否则选择b作为输出。

torch.gather(input,dim,index,out=None):在指定维度上按照索引赋值输出tensor

torch.inex_select(input,dim,index,out=None):按照指定索引赋值输出tensor

torch.masked_select(input,mask,out=None):按照mask输出tensor,输出为向量

torch.take(input,indices):将输入看成1D-tensor,按照索引得到输出tensor

torch.nonzero(input,out=None):输出非0元素的坐标


import torch#torch.where
a = 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)

Pytorch | Tensor张量_第2张图片

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开始,第0列的第0个,第一列的第1个,第二列的第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] = input[i, j, index[i, j, k]]

Pytorch | Tensor张量_第3张图片

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)print(out)


print("torch.take")
a = torch.linspace(1, 16, 16).view(4, 4)


b = torch.take(a, index=torch.tensor([0, 15, 13, 10]))


print(b)

#torch.nonzeroprint("torch.take")a = torch.tensor([[0, 1, 2, 0], [2, 3, 0, 1]])out = torch.nonzero(a)print(out)#稀疏表示

Pytorch | Tensor张量_第4张图片


03

Tensor的组合/拼接

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

Pytorch | Tensor张量_第5张图片


04

Tensor的切片

torch.chunk(tensor,chunks,dim=0):按照某个维度平均分块(最后一个可能小于平均值)

torch.split(tensor,split_size_or_ps,dim=0):按照某个维度依照第二个参数给出的list或者int进行分割tensor


05

Tensor的变形操作

torch().reshape(input,shape)

torch().t(input):只针对2D tensor转置

torch().transpose(input,dim0,dim1):交换两个维度

torch().squeeze(input,dim=None,out=None):去除那些维度大小为1的维度

torch().unbind(tensor,dim=0):去除某个维度

torch().unsqueeze(input,dim,out=None):在指定位置添加维度,dim=-1在最后添加

torch().flip(input,dims):按照给定维度翻转张量

torch().rot90(input,k,dims):按照指定维度和旋转次数进行张量旋转

import torcha = torch.rand(2, 3)print(a)out = torch.reshape(a, (3, 2))print(out)

Pytorch | Tensor张量_第6张图片

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)



06


Tensor的填充操作

torch.full((2,3),3.14)

07

Tensor的频谱操作(傅里叶变换)

Pytorch | Tensor张量_第7张图片
猜您喜欢:
等你着陆!【GAN生成对抗网络】知识星球!  
CVPR 2021 | GAN的说话人驱动、3D人脸论文汇总

CVPR 2021 | 图像转换 今如何?几篇GAN论文

【CVPR 2021】通过GAN提升人脸识别的遗留难题

CVPR 2021生成对抗网络GAN部分论文汇总

经典GAN不得不读:StyleGAN

最新最全20篇!基于 StyleGAN 改进或应用相关论文

超100篇!CVPR 2020最全GAN论文梳理汇总!
附下载 | 《Python进阶》中文版
附下载 | 经典《Think Python》中文版
附下载 | 《Pytorch模型训练实用教程》
附下载 | 最新2020李沐《动手学深度学习》

附下载 | 《可解释的机器学习》中文版

附下载 |《TensorFlow 2.0 深度学习算法实战》

附下载 | 超100篇!CVPR 2020最全GAN论文梳理汇总!
附下载 |《计算机视觉中的数学方法》分享

你可能感兴趣的:(人脸识别,深度学习,tensorflow,nvidia,graphviz)