根据指定参数,使用输入tensor生成一个数据重新排布过的输出tensor。
AsStrided算子的功能是基于已有的张量创建一个新的视图(view),可以通过指定形状(shape)和步长(strides)来重新排列元素。
映射关系(以输入为 3x3 shape、输出为 2x2 shape 为例)
inTensor = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] opParam.size = [2, 2] opParam.stride = [2, 3] opParam.offset = [0]
outTensor = [[1, 4], [3, 6]]
映射关系为:outTensor[i][j] -> v_inTensor[ i * stride[0] + j * stride[1] + offset[0]]。
其中:v_inTensor 为 输入tensor展开的一维向量。
若加上 offset:opParam.offset = [2]。
则计算后输出为:outTensor = [[3, 6], [5, 8]]。
struct AsStridedParam { SVector<int64_t> size; SVector<int64_t> stride; SVector<int64_t> offset; };
成员名称 |
类型 |
默认值 |
描述 |
---|---|---|---|
size |
SVector<int64_t> |
- |
输出tensor的shape。 “size”的长度要求小于或等于8且各元素要求大于0。 |
stride |
SVector<int64_t> |
- |
用于从输入tensor推导输出tensor的各维度的步长。 “stride”的长度要求与size一致,各元素要求大于或等于0。 |
offset |
SVector<int64_t> |
- |
输出tensor内存相对于输入tensor内存的偏移,作为常数使用。 “offset”的长度要求为1且元素要求大于或等于0。 |
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
x |
[din_0, ..., din_n] |
float16/int64 |
ND |
输入tensor。 |
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
y |
[dout_0, ..., dout_m] |
float16/int64 |
ND |
输出tensor。 |
Param参数约束