赞
踩
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位置开始,依次根据步长选取数字作为每行的第一个元素,而列数据在选取时是根据每行的第一个元素作为开始,根据步长依次选取后续的数字。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。