当前位置:   article > 正文

torch.as_strided()详解(总结)

torch.as_strided
torch.as_strided(input, size, stride, storage_offset=0) → Tensor

首先看一下官网中关于torch.as_strided()参数的描述

参数设置

  • input(Tensor) -输入张量。

  • size(tuple或者整数) -输出张量的形状

  • stride(tuple或者整数) -输出张量的步幅

  • storage_offset(int,可选的) -输出张量的基础存储中的偏移量

最难理解的问题就是涉及到步长变化所产生的新的张量结果如何,以下是对不同步长类型的测试,总结出stride中两个参数分别控制的模块。

stride 步长为(0,0)的时候很好理解,就是对于输入的张量没有步幅的移动,因此生成的新的张量y全部为张量x的第一个位置的元素。(此时无法看出两个参数分别对应了哪部分的步幅变化)

stride 步长为(0,1)可以看到,所有的行元素都是一样的,可以确定,第二个参数所负责新tensor的列数据。

stride步长为(1,0)可以看到,每一行内所有列元素都是一样的,但是每一行的元素按照0,1,2每次自增1的的规律在原tensor中去选取的数据,说明第一个参数负责的是每一行数据的内容,数字代表每次向后走时的跨度,按照步幅以此向后选取数据

 

 stride步长为(1,1)可以看到,在行上每一行的开始还是按照原tensor中0,1,2的顺序选择,但是列上我们可以注意到的是,并不是从原数据的tensor按照0,1,2的数据进行的,而是根据行所对应的第一个数据往后去选取,并按照1的步长去一次选择的数字,说明第二个参数控制列数据的选择是根据视图而非原数据进行的。再看一下stride(2,1)的结果我们可以更加明显的看到这个规律。

 再看一下stride(1,4) ,可以发现第二个参数是将所产生的视图数组,按照一行展开后再去选取的结果。

总结:stride的两个参数是该方法最难理解的地方,第一个参数是控制生成tensor的行数据,第二个参数是控制生成tensor的列数据,行数据在选取是总是从原数据tensor 的0位置开始,依次根据步长选取数字作为每行的第一个元素,而列数据在选取时是根据每行的第一个元素作为开始,根据步长依次选取后续的数字。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/272486
推荐阅读
相关标签
  

闽ICP备14008679号