3. Operation Semantics¶
3.1. Abs¶
对输入张量逐元素进行绝对值计算得到输出张量, output = |input|
- 输入
input
T输入张量
- 输出
output
T输出
input
的绝对值
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输入和输出类型为数值类型
3.2. Acos¶
对输入张量逐元素进行反余弦计算得到输出张量, output = std::acos(input)
- 输入
input
T输入张量
- 输出
output
T输出
input
的反余弦值
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.3. Add¶
对输入张量逐元素进行求和计算得到输出张量, output = lhs + rhs
- 属性
broadcast_dimensions
list of ints(可选)指定需要被广播的维度
- 输入
lhs
T左加数
rhs
T右加数
- 输出
output
T输出
lhs + rhs
的和
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输入和输出类型为数值类型
3.4. And¶
逐元素做逻辑与运算, output = lhs && rhs
- 属性
broadcast_dimensions
list of ints(可选)指定需要被广播的维度
- 输入
lhs
T逻辑运算的第一个输入
rhs
T逻辑运算的第二个输入
- 输出
output
T输出
lhs && rhs
的值
- 类型限制
T
tensor(bool)限制输入和输出类型为布尔
3.5. ArgMax¶
计算输入张量元素沿所提供维度的最大元素索引。如果 keepdims
为 True,则输出张量与输入张量的 rank 相同。如果 keepdims
为 False ,那么输出张量就会被裁剪掉指定的维度。如果 select_last_index
为 True (默认为 False),那么如果输入中出现的最大值不止一次,则会选择最后出现的最大值的索引。否则,将选择第一次出现的索引。输出张量的类型为整型。
- 属性
axis
int(默认为0)(可选)计算最大元素索引的轴,可接受范围为:
[0, r-1]
,r为输入张量的rank
keepdims
bool(默认为true)(可选)是否保留缩小的维度,默认为true表示保留该维度
select_last_index
bool(默认为false)(可选)如果输入中出现多次最大值,是选择最后一个索引还是第一个索引。 默认为false表示选择第一次出现的索引。
- 输入
input
T输入张量
- 输出
output
tensor(int64)整型的输出张量
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输入类型为数值类型
3.6. ArgMin¶
计算输入张量元素沿所提供维度的最小元素索引。如果 keepdims
为 True,则输出张量与输入张量的 rank 相同。如果 keepdims
为 False ,那么输出张量就会被裁剪掉指定的维度。如果 select_last_index
为 True (默认为 False),那么如果输入中出现的最小值不止一次,则会选择最后出现的最小值的索引。否则,将选择第一次出现的索引。输出张量的类型为整型。
- 属性
axis
int(默认为0)(可选)计算最小元素索引的轴,可接受范围为:
[0, r-1]
,r为输入张量的rank
keepdims
bool(默认为true)(可选)是否保留缩小的维度,默认为true表示保留该维度
select_last_index
bool(默认为false)(可选)如果输入中出现多次最小值,是选择最后一个索引还是第一个索引。 默认为false表示选择第一次出现的索引。
- 输入
input
T输入张量
- 输出
output
tensor(int64)整型的输出张量
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输入类型为数值类型
3.7. Asin¶
对输入张量逐元素进行反正弦计算得到输出张量, output = std::asin(input)
- 输入
input
T输入张量
- 输出
output
T输出
input
的反正弦值
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.8. Asinh¶
对输入张量逐元素进行反双曲正弦计算得到输出张量, output = std::asinh(input)
- 输入
input
T输入张量
- 输出
output
T输出
input
的反双曲正弦值
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.9. Atan¶
对输入张量逐元素进行反正切计算得到输出张量, output = std::atan(input)
- 输入
input
T输入张量
- 输出
output
T输出
input
的反正切值
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.10. Atan2¶
对输入张量 lhs/rhs
逐元素进行反正切计算得到输出张量, output = std::atan2(lhs/rhs)
- 输入
lhs
T反正切运算的第一个输入
rhs
T反正切运算的第二个输入
- 输出
output
T输出
lhs/rhs
的反正切值
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.11. Atanh¶
对输入张量逐元素进行反双曲正切计算得到输出张量, output = std::atanh(input)
- 输入
input
T输入张量
- 输出
output
T输出
input
的反双曲正切值
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.12. AveragePool¶
根据池化核大小、步长大小和填充长度对输入张量 X 进行平均池化处理。平均池化根据池化核大小计算输入张量子区域中所有值的平均值,并将数据下采样到输出张量 Y 中,以便进一步处理。
来源: https://github.com/onnx/onnx/blob/rel-1.14.1/docs/Operators.md#AveragePool
- 属性
dims
list of ints指定在哪个维度应用平均池化
kernel_shape
list of ints每个轴的池化核大小
ceil_mode
bool(默认为false)(可选)使用 ceil 还是 floor(默认)来计算输出形状
count_include_pad
bool(默认为false)(可选)计算边缘值时是否包含填充像素
strides
list of ints(可选)每个维度的步长,如果不存在,则默认为 1
padding
list of ints(可选)对输入张量每个维度的起点和终点的填充,可以是大于或等于 0 的任意值,该值表示在相应维度的起点和终点部分添加的像素数。
padding
的格式如下[x1_begin, x2_begin…x1_end, x2_end,…], 其中 xi_begin 表示在维度i的开始部分添加的像素数,xi_end 表示在维度i的结束部分添加的像素数。此属性不能与
auto_pad
属性同时使用。如果不存在,每个空间轴的开始和结束处的填充默认为 0。
auto_pad
string(可选)自动填充模式,必须为NOTSET、SAME_UPPER、SAME_LOWER或VALID。
NOTSET表示使用显式填充。
SAME_UPPER或SAME_LOWER表示填充输入,使得每个维度d:
output_shape[d] = ceil(input_shape[d] / strides[d])
。 在填充数量为偶数时,填充在input两边平分,而在填充数量为奇数时,SAME_UPPER表示在input的末尾添加额外的填充,SAME_LOWER表示在input的起始添加额外的填充。VALID则表示不做填充。
- 输入
input
T输入张量
- 输出
output
T整型的输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.13. BatchNormGrad¶
计算 BatchNormGradOp 的梯度,对于特征维度中的每个特征,该操作会计算输入张量、偏置和比例在所有其他维度上的梯度。
来源: https://www.tensorflow.org/xla/operation_semantics#batchnormgrad
- 属性
epsilon
float为避免除以零而使用的ε值
feature_index
int输入张量中特征维度的索引
- 输入
input
T输入张量
scale
T缩放张量,shape为[C],C是输入张量的通道数
mean
T批输入的平均值
variance
T批输入的方差
grad_output
T传递给 BatchNormTraining 的梯度
- 输出
grad_input
T输入的梯度
grad_scale
T缩放的梯度
grad_bias
T偏置的梯度
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.14. BatchNormInference¶
对于特征维度中的每个特征,BatchNormInference会计算所有其他维度的均值和方差,并使用均值和方差对输入张量中的每个元素进行归一化处理。BatchNormInference 等同于调用 BatchNormTraining,但不计算每个批次的均值和方差,而是使用输入的均值和方差作为估计值, 以减少推理的延迟。 output = (input - input_mean) / sqrt(input_var + epsilon) * scale + bias
来源: https://www.tensorflow.org/xla/operation_semantics#batchnorminference
- 属性
epsilon
float为避免除以零而使用的ε值
feature_index
int输入张量中特征维度的索引
- 输入
input
T输入张量
scale
T缩放张量,shape为[C],C是输入张量的通道数
bias
T偏置张量,shape为[C],C是输入张量的通道数
mean
T批输入的平均值
variance
T批输入的方差
- 输出
output
T输出与输入张量的形状相同,并且包含每个批次的归一化值。
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.15. BatchNormTraining¶
对于特征维度中的每个特征,BatchNormTraining会计算所有其他维度的均值和方差,并使用均值和方差对输入张量中的每个元素进行归一化处理。 输出张量将按以下计算步骤得到:
batch_mean = ReduceMean(X, axis=feature_index)
batch_var = ReduceVar(X, axis=feature_index)
output = (input - batch_mean) / sqrt(batch_var + epsilon) * scale + B
来源: https://www.tensorflow.org/xla/operation_semantics#batchnormtraining
- 属性
epsilon
float为避免除以零而使用的ε值
feature_index
int输入张量中特征维度的索引
- 输入
input
T输入张量
scale
T缩放张量,shape为[C],C是输入张量的通道数
bias
T偏置张量,shape为[C],C是输入张量的通道数
- 输出
output
T输出与输入张量的形状相同,并且包含每个批次的归一化值。
mean
T批输入的平均值
variance
T批输入的方差
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.16. BCELoss¶
3.17. BitcastConvert¶
逐元素将输入张量从一种类型bitcast到目标类型,输入和输出张量的大小必须一致。
来源: https://www.tensorflow.org/xla/operation_semantics#bitcastconverttype
- 输入
input
T输入张量
- 输出
output
T1具有目标类型的输出张量
- 类型限制
T
: 输入支持所有类型T1
: 输出支持所有类型
3.18. Broadcast¶
通过复制输入张量中的数据为输入张量添加维数。
来源: https://www.tensorflow.org/xla/operation_semantics#broadcast
- 属性
broadcast_sizes
list of ints新维度的大小
- 输入
input
T输入张量
- 输出
output
T增加新维度的输出张量
- 类型限制
T
: 输入和输出支持所有类型
3.19. BroadcastInDim¶
通过复制张量中的数据来扩展张量的大小和rank。
来源: https://www.tensorflow.org/xla/operation_semantics?hl=en#broadcastindim
- 属性
broadcast_dimensions
list of ints指明了输入形状的每个维度对应于目标形状中的哪个维度。
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
:输入和输出支持所有类型
3.20. Cbrt¶
对输入张量逐元素进行立方根计算得到输出张量。 output = std::cbrt(input)
- 输入
input
T输入张量
- 输出
output
To输出张量
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输入类型为数值类型
To
tensor(float16), tensor(float), tensor(double)限制输出类型为浮点型
3.21. Ceil¶
逐元素对输入张量进行向上取整。 output = std::ceil(input)
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入类型为浮点型
3.22. Cholesky¶
计算一批对称(Hermitian)正定矩阵的Cholesky分解。
来源: https://www.tensorflow.org/xla/operation_semantics?hl=en#cholesky
- 属性
lower
bool输出的矩阵是上三角矩阵或下三角矩阵,true表示下三角矩阵。
- 输入
input
T输入张量,浮点类型且rank>2。输入被视为一批矩阵,其中除了最后的2个维度之外的所有维度都是批维度。
- 输出
output
T输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.23. Clamp¶
给定一个输入以及最小和最大值,如果输入在最小和最大之间,则返回该输入,否则返回最小值。如果输入低于此范围,或者如果输入为高于该范围。
也就是说, clamp(a,x,b)=min(max(a,x),b)
。三者的形状必须相同,或者广播形式在一定的限制下,min和max可以是T类型的标量。
- 输入
min
TN维张量,代表最小值
input
TN维输入张量
max
TN维张量,代表最大值
- 输出
output
T输出张量
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输入和输出类型为数值类型
3.24. Compare¶
根据指定的 comparison_direction
来执行lhs和rhs之间的比较。
- 属性
comparison_direction
string字符串,有六种类型的比较。其中 "NE"表示不相等,"EQ"表示相等,"GE"表示大于或等于,"GT"表示大于,"LE"表示小于或等于,"LT"表示小于。
- 输入
lhs
T第一个输入张量
rhs
T第二个输入张量
- 输出
output
To输出张量
- 类型限制
T
: 输入支持所有类型To
tensor(bool)限制输出类型为布尔
3.25. Complex¶
逐元素将一对实数和虚数转换为复数。
- 输入
lhs
T复数张量的实部
rhs
T复数张量的虚部
- 输出
output
To复数张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入类型为浮点型
To
tensor(complex)限制输出类型为复数型
3.26. Concatenate¶
沿着指定的维度连接一组张量。
来源: https://www.tensorflow.org/xla/operation_semantics#concatenate
- 属性
dimension
int用于指定要在张量之间进行连接的维度。负值表示从后面开始计算。接受范围为:
[-r,r-1]
,其中r=rank(inputs)
- 输入
inputs
list of TN个张量,N>=1。
- 输出
output
T输出张量
- 类型限制
T
: 输入和输出支持所有类型
3.27. Constant¶
用来产生一个常数张量。
- 属性
value
T常数张量
- 输出
output
T输出常数张量
- 类型限制
T
: 输入和输出支持所有类型
3.28. Conv¶
计算神经网络中使用的卷积。这里,卷积可以被认为是n维窗口在n维基础区域上移动,并且对窗口的每个可能位置进行计算。
来源: https://www.tensorflow.org/xla/operation_semantics?hl=en#conv_convolution
- 属性
input_batch_dimension
int该维度中的每个坐标表示一个独立的输入,对其进行卷积。
input_feature_dimension
int基础区域中的每个位置(y, x)都有一个与其相关的向量,该向量进入该维度
input_spatial_dimensions
list of ints描述定义窗口移动经过的基本区域的n个空间维度。
kernel_input_feature_dimension
int此维度的大小乘以
feature_group_count
应等于lhs的特征维度的大小。
kernel_output_feature_dimension
int输出的特征维度。
kernel_spatial_dimensions
list of ints描述定义在基础区域上移动的n-d窗口的n个空间维度。
output_batch_dimension
int输出的批维度。
output_feature_dimension
int输出的特征维度。
output_spatial_dimensions
list of ints描述输出的n个空间维度。
window_strides
list of ints指定卷积窗口在空间维度上的步幅。 例如,如果空间维度中第一个维度的步幅为3,则窗口只能放置在第一个空间索引可被3整除的坐标处。
padding
list of ints卷积核操作填充大小。 填充量可以为负数,负填充的绝对值表示在进行卷积之前要从指定维度中删除的元素数量。
lhs_dilation
list of ints指定了要应用于lhs中的每个维度的膨胀因子。如果膨胀因子是d,那么d-1个空洞隐含地放置在该维度中的每个项之间从而增加张量的大小。这些空洞填充了一个无运算值,对于卷积来说相当于填充为零。
rhs_dilation
list of ints指定了要应用于rhs中的每个维度的膨胀因子。如果膨胀因子是d,那么d-1个空洞隐含地放置在该维度中的每个项之间,从而增加张量的大小。这些空洞填充了一个无运算值,对于卷积来说相当于填充为零。
feature_group_count
int用于分组卷积,是输入和输出特征维度的除数。 如果
feature_group_count
大于1,则意味着输入和输出特征维度以及 rhs 输出特征维度被均匀地分成feature_group_count
个组,每组由连续的特征子序列组成。 rhs的输入特征维度等于lhs输入特征维度除以feature_group_count(因此它已经具有一组输入特征的大小)。第i个组一起用于计算feature_group_count
个单独的卷积,这些卷积的结果在输出特征维度中被连接在一起。
batch_group_count
int用于分组filters的反向传播。 如果batch_group_count大于1,则意味着输出批维度的大小应为输入批维度/batch_group_count的大小。batch_group_count 必须是输出特征大小的除数。
auto_pad
string(默认””)(可选)自动填充属性,参考 AveragePool
- 输入
lhs
T输入张量,rank=n+2
rhs
T输入卷积核权重张量,rank=n+2
- 输出
output
T输出张量
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输入和输出类型为数值类型
3.29. ConvBias¶
此操作与Conv执行相同的操作,只是指定了偏差并将其添加到卷积的结果中。
- 属性
input_batch_dimension
int该维度中的每个坐标表示一个独立的输入,对其进行卷积。
input_feature_dimension
int基础区域中的每个位置(y, x)都有一个与其相关的向量,该向量进入该维度
input_spatial_dimensions
list of ints描述定义窗口移动经过的基本区域的n个空间维度。
kernel_input_feature_dimension
int此维度的大小乘以
feature_group_count
应等于lhs的特征维度的大小。
kernel_output_feature_dimension
int输出的特征维度。
kernel_spatial_dimensions
list of ints描述定义在基础区域上移动的n-d窗口的n个空间维度。
output_batch_dimension
int输出的批维度。
output_feature_dimension
int输出的特征维度。
output_spatial_dimensions
list of ints描述输出的n个空间维度。
window_strides
list of ints指定卷积窗口在空间维度上的步幅。 例如,如果空间维度中第一个维度的步幅为3,则窗口只能放置在第一个空间索引可被3整除的坐标处。
padding
list of ints卷积核操作填充大小。 填充量可以为负数,负填充的绝对值表示在进行卷积之前要从指定维度中删除的元素数量。
lhs_dilation
list of ints指定了要应用于lhs中的每个维度的膨胀因子。如果膨胀因子是d,那么d-1个空洞隐含地放置在该维度中的每个项之间,从而增加张量的大小。这些空洞填充了一个无运算值,对于卷积来说,相当于填充为零。
rhs_dilation
list of ints指定了要应用于rhs中的每个维度的膨胀因子。如果膨胀因子是d,那么d-1个空洞隐含地放置在该维度中的每个项之间,从而增加张量的大小。这些空洞填充了一个无运算值,对于卷积来说相当于填充为零。
feature_group_count
int用于分组卷积,是输入和输出特征维度的除数。 如果
feature_group_count
大于1,则意味着输入和输出特征维度以及 rhs 输出特征维度被均匀地分成feature_group_count
个组,每组由连续的特征子序列组成。 rhs的输入特征维度等于lhs输入特征维度除以feature_group_count
(因此它已经具有一组输入特征的大小)。第i个组一起用于计算feature_group_count
个单独的卷积,这些卷积的结果在输出特征维度中被连接在一起。
batch_group_count
int用于分组filters的反向传播。 如果
batch_group_count
大于1,则意味着输出批维度的大小应为输入批维度/batch_group_count的大小。batch_group_count
必须是输出特征大小的除数。
auto_pad
string(默认””)(可选)自动填充属性,参考 AveragePool
- 输入
lhs
T输入张量,rank=n+2
rhs
T输入卷积核权重张量,rank=n+2
bias
T输入偏差张量,rank=1
- 输出
output
T输出张量
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输入和输出类型为数值类型
3.30. Convert¶
类似C++的static_cast,将输入张量的dtype逐元素转化为输出张量的dtype。 输入和输出的形状必须匹配且不能是元组。注意:从int64到int32的转换保留了符号位,而不是简单地取低位。例如 convert<int64_t,int32_t>(0x8FFFFFFF1FFFFFFF)=0x9FFFFFFF
- 输入
input
T输入张量
- 输出
output
T1输出张量
- 类型限制
T
: 输入支持所有类型T1
: 输出支持所有类型
3.31. Copy¶
获得输入张量的一个拷贝。
- 输入
input
T输入张量
- 输出
output
T输出
input
的拷贝结果
- 类型限制
T
: 输入和输出支持所有类型
3.32. Cos¶
对输入张量逐元素进行余弦计算得到输出张量。
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.33. CTCLoss¶
计算连续时间(未分段)序列和目标序列之间的损失。CTCLoss对输入与目标可能对齐的概率求和,产生相对于每个输入节点可微分的损失值。输入与目标是多对一,因此限制目标序列的长度必须小于等于输入长度。
来源: https://pytorch.org/docs/stable/generated/torch.nn.CTCLoss.html#torch.nn.CTCLoss
- 属性
blank(默认为0)
int空白标签
- 输入
input
T输入张量,形状为(T, N, C)或(T, C),其中T=输入长度,N=批大小,C=类数(包括空白)。以输出的对数概率形式传入。
targets
Ti形状[N, S]或(sum(target_lengths)),其中N=批大小,S=最大目标长度,如果形状为[N, S]。它代表了目标序列,目标序列中的每个元素都是一个类索引,并且目标索引不能为空(默认值=0)。在[N, S]形式中,目标被填充到最长序列的长度,并堆叠在一起。在[sum(target_lengths)]形式中,要求目标不填充并在一维上连接。
input_lengths
Ti大小(N)或()的元组或张量,其中N=批大小。它表示输入的长度(每个必须≤T)。并且为每个序列指定长度, 以在假设序列被填充为相等长度的情况下实现掩码。
target_lengths
Ti大小(N)或()的元组或张量,其中N=批大小。它表示目标的长度。为每个序列指定长度,以在序列被填充为相等长度的情况下实现掩码。如果目标形状是[N, S],则target_length实际上是每个目标序列的终止索引S_N,使得target_N=批次中每个目标的target[N, 0:S_N]。每个长度必须≤S。如果目标被给定为1d张量,则target_length必须加起来为张量的总长度。
- 输出
loss
T标量数据。假设reduction为”none”,如果输入是批处理则为(N), 如果输入不是批处理的则为()。其中N=批大小。
alpha
T计算中需要的数据。
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
Ti
tensor(int32), tensor(int64)限制targets类型为整型
3.34. CustomCall¶
3.35. DepthToSpace¶
3.36. Div¶
逐元素求商, output = lhs / rhs
- 属性
broadcast_dimensions
list of ints(可选)指定需要被广播的维度
- 输入
lhs
T被除数
rhs
T除数
- 输出
output
T输出
lhs / rhs
的商
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输入和输出类型为数值类型
3.37. Dot¶
在左乘数的第二个维度(如果rank为1则为第一个维度)和右乘数的第一个维度执行乘积之和,执行相乘的维度大小必须相同。 实际上,Dot可以用来完成向量间的点乘,向量/矩阵乘法或者矩阵/矩阵乘法。
来源: https://www.tensorflow.org/xla/operation_semantics#dot
- 输入
lhs
T左乘数,只能为一维或者二维张量
rhs
T右乘数,只能为一维或者二维张量
- 输出
output
T输出乘积,确切的输出维度取决于输入的维度:
vector [n] dot vector [n] = > scalar
matrix [m x k] dot vector [k] = > vector [m]
matrix [m x k] dot matrix [k x n] = > matrix [m x n]
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输入和输出类型为数值类型
3.38. DotGeneral¶
DotGeneral与Dot相同,但是允许为左乘数和右乘数指定收缩维度和批维度。 在左乘数和右乘数的收缩维度上执行乘积之和,批维度保持不变。 左乘数和右乘数的收缩维度的值可以不同,但指定的维度个数必须保持一致。 左乘数和右乘数的批维度则必须保持相同的值。
来源: https://www.tensorflow.org/xla/operation_semantics#dotgeneral
- 属性
lhs_batching_dimensions
list of ints左乘数的批维度
rhs_batching_dimensions
list of ints右乘数的批维度
lhs_contracting_dimensions
list of ints左乘数的收缩维度
rhs_contracting_dimensions
list of ints右乘数的收缩维度
- 输入
lhs
T左乘数
rhs
T右乘数
- 输出
output
T输出乘积,确切的输出维度取决于维度属性:
[b0, m, k] dot [b0, k, n] = >[b0, m, n], LBD = RBD = 0, LCD = 2, RCD = 1 (LBD is lhs_batching_dimensions)
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输入和输出类型为数值类型
3.39. DotGeneralBias¶
继承自DotGeneral,计算完dot后,给输出张量在特征维度上添加偏置。
- 属性
lhs_batching_dimensions
list of ints左乘数的批维度
rhs_batching_dimensions
list of ints右乘数的批维度
lhs_contracting_dimensions
list of ints左乘数的收缩维度
rhs_contracting_dimensions
list of ints右乘数的收缩维度
- 输入
lhs
T左乘数
rhs
T右乘数
bias
: T1偏置张量,必须为一维张量
- 输出
output
T输出添加了偏置的乘积张量
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输入和输出类型为数值类型
T1
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制偏置类型为数值类型
3.40. Dropout¶
3.41. DynamicBroadcastInDim¶
此操作与BroadcastInDim执行相同的操作,只是通过shape动态指定结果形状。
- 属性
broadcast_dimensions
list of ints列表,指明了输入形状的每个维度对应于目标形状中的哪个维度。
- 输入
input
T输入张量
shape
Ts形状张量,指定输出形状
- 输出
output
T输出张量
- 类型限制
T
: 输入和输出支持所有类型Ts
tensor(int32), tensor(int64)限制shape类型为整型
3.42. DynamicIota¶
创建具有指定形状的张量,张量中的数值从0开始,按照指定维度逐一递增,DynamicIota的输出张量的形状是动态输入的。
来源: https://www.tensorflow.org/xla/operation_semantics#iota
- 属性
iota_dimension
int沿哪个维度递增
- 输入
shape
int输出张量的形状,一维张量
- 输出
output
T形状为
shape
的输出张量
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输出类型为数值类型
3.43. DynamicPad¶
给定一个待填充数据的输入张量,指定各个维度起始和末尾要填充的数量、 (可选)填充模式、(可选)常量值,就可以生成一个填充后的输出张量。
- 属性
mode
enum支持四种填充模式: PAD_VALUE,PAD_EDGE,PAD_REFLECT,PAD_SYMMETRIC
PAD_VALUE: 使用输入
padding_value
指定的常量值填充PAD_EDGE: 使用输入张量的边缘值填充
PAD_REFLECT: 使用输入张量沿每个轴的起始值和末尾值的镜像进行填充,起始值和末尾值为镜面,
[n-2, n-1, n, (n-1), (n-2)], ()内为填充值
PAD_SYMMETRIC: 使用输入张量沿每个轴的起始值和末尾值的对称值进行填充,
[n-2, n-1, n, (n), (n-1)],()内为填充值
- 输入
input
T输入张量
pads
int每个维度的起始和末尾要填充或者移除(负值)的数量,格式为:
[x1_begin, x2_begin, ..., x1_end, x2_end,...]
padding_value
T当
mode
为 PAD_VALUE 时,填充的常量值
- 输出
output
T填充后的输出张量
- 类型限制
T
: 输入和输出支持所有类型
3.44. DynamicReshape¶
改变输入张量的形状为指定形状(第二个输入),指定形状中最多有一个维度值可以为 -1,在这种情况下,维度值是根据张量的大小和其余维度推断出来的。指定形状的维度值也可以为 0,在这种情况下,输出张量维度值保持不变(即取自输入张量), 指定形状可以为空,这意味着输入张量将转换为标量。输入张量的形状和输出张量的形状必须具有相同的元素数。
如果设置了属性 allowzero=1
,则指定的形状同时包含 0和 -1 是无效的,因为与 -1 相对应的维度值无法唯一确定。
- 属性
allowzero
int(默认为0)默认情况下,当
shape
输入中的任何值等于 0时,输出张量相应的维度值将从输入张量中动态复制。allowzero=1
则表示,如果shape
输入中的任何值被设置为 0,0将被保留为输出张量对应的维度值,类似于 NumPy。
- 输入
input
T输入张量
shape
int输出张量的形状,一维张量
- 输出
output
Treshape后形状为
shape
的输出张量
- 类型限制
T
: 输入和输出支持所有类型
3.45. DynamicSlice¶
从输入张量的动态起始索引处提取一个子张量,每个维度的切片大小由 slice_sizes 指定,每
个维度切片的起始和终点为: [start, start + size)
。
来源: https://www.tensorflow.org/xla/operation_semantics#dynamicslice
- 属性
slice_sizes
list of intsN(等于输入张量维度) 个整数的列表,指定每个维度切片的大小
- 输入
input
T输入张量
start_indices
Tindrank必须为1,维度值等于输入张量的rank
- 输出
output
T输出切片的子张量
- 类型限制
T
: 输入和输出支持所有类型Tind
tensor(int32), tensor(int64)限制索引类型为整型
3.46. DynamicUpdateSlice¶
在切片的形状中用 update
的值进行覆盖,其他位置为输入张量的值, update
的shape决定了输出子张量的shape。
来源: https://www.tensorflow.org/xla/operation_semantics#dynamicupdateslice
- 输入
input
T输入张量
update
Tupdate的每个维度必须严格大于0,且对于每个维度d都保持
start[d] + update.dims[d] <= input.dims[d]
以避免对越界的维度进行更新
start_indices
Tindrank必须为1,维度值等于输入张量的rank
- 输出
output
T输出切片的子张量,与输入张量shape相同
- 类型限制
T
: 输入和输出支持所有类型Tind
tensor(int32), tensor(int64)限制索引类型为整型
3.47. Elu¶
激活函数,对输入张量逐元素按照以下公式计算得到输出张量:
f(x) = alpha * (exp(x) - 1.) for x < 0, f(x) = x for x >= 0.
来源: https://github.com/onnx/onnx/blob/main/docs/Operators.md#Elu
- 属性
alpha
floatElu中的系数。
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.48. Erf¶
3.49. Exp¶
对输入张量逐元素进行指数计算得到输出张量
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.50. Expm1¶
对输入张量逐元素按照以下公式计算得到输出张量:
y=exp(x) - 1
- 输入
input
T输入张量
- 输出
output
To输出张量
- 类型限制
T
tensor(uint8), tensor(uint32), tensor(int8), tensor(int32), tensor(float16), tensor(float), tensor(double)限制输入类型为数值类型
To
* tensor(float16), tensor(float), tensor(double)*限制输出类型为浮点型
3.51. Floor¶
逐元素对输入张量进行向下取整。
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.52. Gather¶
Gather等同于一组(个数为batchsize)相同 slice_sizes
的DynamicSlice得到一个维度为batchsize + slice_sizes的输出张量,在此基础上start_indices和多次DynamicSlice得到的张量都可以隐含Transpose语义,collapsed_slice_dims隐含了Squeeze语义。
首先根据输入 start_indices
中切片的起始索引和属性 index_vector_dim
以及 start_index_map
计算 input
中切片窗口的起始索引值。
其次根据属性 slice_sizes
和起始索引值进行多次DynamicSlice操作得到切片, 并根据属性 collapsed_slice_dims
折叠切片相应的维度。
最后根据属性 offset_dims
将输出 output
形状维度中的切片维度Transpose到相应位置。
来源: https://www.tensorflow.org/xla/operation_semantics?hl=en#gather
- 属性
index_vector_dim
int指定
start_indices
中包含起始位置的维度。 如果index_vector_dim = start_indices.rank
, 则隐式地认为start_indices
的尾部有一个值为 1 的维度。 例如,如果start_indices
形状为[6, 7],且index_vector_dim = 2
,那么就隐含地认为start_indices
形状为[6, 7, 1]。
start_index_map
list of intsstart_indices
中每个index (大小可小于input.rank) 数组中每个值映射到input
完整index的位置,其他未映射位置为0,从而得到完整的input
index,用来作为DynamicSlice的起始索引
collapsed_slice_dims
list of ints属性
slice_sizes
需要折叠的维度,必须满足slice_sizes
中对应的size为1,折叠以后在output
中不存在对应维度,即Squeeze语义
offset_dims
list of intsoutput
维度包含batch维度和折叠后slice_sizes
维度两部分,offset_dims
明确了折叠后slice_sizes
维度在output
维度中的位置,batch维度则按照顺序见缝插针放入output
维度,此处可隐含Transpose语义
slice_sizes
list of ints同DynamicSlice中的
slice_sizes
,数组大小为input
的秩,对应input
每个维度上slice的元素个数
indices_are_sorted
bool(默认为false)输入
scatter_indices
中的索引是否已经排序
- 输入
input
T输入张量
start_indices
Tslice起始位置,可包含多个batch维度和一个index维度,多数情况下batch维度在前,index维度在最后,即[batch1, batch2, …, index_size],index_size所在位置由index_vector_dim指定
- 输出
output
T输出张量, 与输入张量具有相同的形状
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(half), tensor(bfloat16), tensor(float), tensor(double).限制输入和输出类型为数值张量
3.53. GeGlu¶
激活函数,对输入张量逐元素按照以下公式计算得到输出张量:
GEGLU(a,b)=a times gelu(b)
,其中input沿dim一分为二,形成 a
和 b
, gelu
是gelu函数, times
是矩阵的逐元素乘积。
- 属性
approximate
boolGeGlu近似算法,
false
:不使用近似;true
:使用tanh近似。
dim
int用于拆分输入的维度。
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.54. Gelu¶
激活函数,对输入张量逐元素按照以下公式计算得到输出张量:
y=0.5*x*(1+erf(x/sqrt(2)))
。如果属性 approximate
设置为true, 则使用的估计函数为 y=0.5*x*(1+Tanh(sqrt(2/p)*(x+0.044715*x^3))
。
- 属性
approximate
boolGelu近似算法,
false
:不使用近似;true
:使用tanh近似。
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.55. Gemm¶
3.56. GeneralSplit¶
3.57. GetTupleElement¶
3.58. GlobalAveragePool¶
对于输入张量,GlobalAveragePool对同一通道中的值进行平均池化。该过程等价于核大小为输入张量的空间维度的AveragePool。
- 属性
dims
list of ints使用dims来指定H和W的dim
- 输入
input
T来自上一个算子的输入数据张量;在onnx中,图像的形状[N x C x H x W],对于非图像情况,形状为[N x C x D1 x D2…Dn],其中N是批次大小。在我们的实现中,输入的布局可能是[N x H x W x C]或[N x D1 x D2…x C]
- 输出
output
T通过输入张量池化输出数据张量。输出张量与输入具有相同的秩。输出形状[N x C]的两个维度与输入相同, 而其他维度均为1。
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.59. GlobalMaxPool¶
3.60. Glu¶
激活函数,对输入张量逐元素按照以下公式计算得到输出张量:
GLU(a,b)=a times sigmoid(b)
,其中 input
沿 dim
一分为二,形成 a
和 b
, sigmoid
是sigmoid函数, times
是矩阵之间的逐元素乘积。
- 属性
dim
int用于分割输入的维度。
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.61. GridSample¶
给定输入张量和网格张量, 使用网格中的像素位置和对应的输入张量的像素值计算输出张量。 对于具有形状[N, C, H, W]的输入张量和具有形状[N, H_out, W_out, 2]的网格张量, 输出张量将的形状将为[N, C, H_out, W_out]。
对于每个输出位置[N, C, H_out, W_out], 网格中[N, H_out, W_out]用来指定输入像素的位置x和y, 根据这两个位置和输入张量的像素值插值输出[N, C, H_out, W_out]。
来源: https://github.com/onnx/onnx/blob/main/docs/Changelog.md#GridSample-16
- 属性
mode
int插值模式, 支持最近邻插值(NEAREST)和双线性插值(LINEAR)两种模式
align_corners
bool对齐角点, 如果align_carners=true, 则极值(-1和1)被认为是输入的角点像素的中心点。如果align_carners=false, 则它们被认为是指输入的角点像素的角点。
padding_mode
enum超出网格边界的值的填充方式, 参考 Pad。
- 输入
input
T输入张量, 支持形状为[N, C, H, W]
grid
Tg网格张量, 支持形状为[N, H_out, W_out, 2]
- 输出
output
T输出插值后的张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
Tg
tensor(float)限制网格输入类型为浮点型
3.62. GroupNorm¶
3.63. Gtu¶
激活函数,对输入张量逐元素按照以下公式计算得到输出张量:
Gtu(a, b) = tanh(a) times sigmoid(b)
,其中 times
表示矩阵之间的逐元素乘积。
来源: https://arxiv.org/pdf/1612.08083.pdf
- 属性
dim
int沿着dim维度将输入张量平均分为a和b两部分
- 输入
input
T输入张量,指定的dim维度大小必须是2的倍数。
- 输出
output
T输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double).限制输入和输出类型为浮点型
3.64. HardSigmoid¶
激活函数,对输入张量逐元素按照以下公式计算得到输出张量:
y = max(0, min(1, slope * x + offset))
来源: https://github.com/onnx/onnx/blob/main/docs/Operators.md#HardSigmoid.
- 属性
slope
floatslope的值
offset
floatoffset的值
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.65. HardSwish¶
激活函数,对输入张量逐元素按照以下公式计算得到输出张量:
y = x * max(0, min(1, alpha * x + beta)) = x * HardSigmoid<alpha, beta>(x)
,其中alpha = 1/6, beta = 0.5。
来源: https://github.com/onnx/onnx/blob/rel-1.14.1/docs/Operators.md#HardSwish
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.66. If¶
3.67. Imag¶
对输入张量逐元素计算复数的虚部得到输出张量,输入的类型必须是复数或浮点型。
- 输入
input
T输入张量
- 输出
output
T输出
input
的虚部
- 类型限制
T
tensor(float16), tensor(float), tensor(double), tensor(complex)限制输入和输出类型为复数或浮点型
3.68. InstanceNorm¶
执行实例归一化, 参考论文https://arxiv.org/abs/1607.08022
y = scale * (x - mean) / sqrt(variance + epsilon) + bias
其中mean和variance是对每个实例的每个通道计算得到的。InstanceNorm通常用于对图像像素进行归一化。
来源: https://github.com/onnx/onnx/blob/main/docs/Operators.md#InstanceNormalization
- 属性
epsilon
float为避免除以零而使用的ε值
- 输入
input
T输入张量,对于图像情况,形状为 (N, C, H, W) 或 (N, H, W, C) 其中 N 是批次大小,C 是通道数,H和W是图片的高度和宽度。 对于非图像情况,形式为 (N x C x D1 x …Dn) 或 (N x D1 x D2 … Dn x C),其中 N 是批次大小
scale
T大小为C的一维张量作为scale输入。
bias
T大小为C的一维张量作为bias输入。
- 输出
output
T输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.69. Iota¶
创建具有指定形状的张量,张量中的数值从0开始,按照指定维度逐一递增。
来源: https://www.tensorflow.org/xla/operation_semantics#iota
- 属性
iota_dimension
int沿哪个维度递增
- 输出
output
T输出张量
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输出类型为数值类型
3.70. IsFinite¶
对输入张量逐元素进行判断是否是有限的。
output = std::isfinite(input)
来源: https://pytorch.org/docs/stable/generated/torch.isfinite.html#torch.isfinite
- 输入
input
T输入张量
- 输出
output
To输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入类型为浮点型
To
tensor(float16), tensor(float), tensor(double), tensor(int8), tensor(int32), tensor(bool)限制输出类型为数值和布尔
3.71. LayerNorm¶
整体计算可以分为两个阶段。第一个阶段是标准化(standardization), 它使得标准化后的元素具有零均值和单位方差。标准化所需的计算可以用以下方程描述:
Mean = Reduce<dimensions=normalized_axes, computation='MEAN'>(X)
D = Sub(X, Mean)
DD = Mul(D, D)
Var = Reduce<dimensions=normalized_axes, computation='MEAN'>(DD)
VarEps = Add(Var, epsilon)
StdDev = Sqrt(VarEps)
InvStdDev = Reciprocal(StdDev)
Normalized = Mul(D, InvStdDev)
其中, normalized_axes为[axis, …, X的维度 - 1]。
变量Var和StdDev分别表示方差和标注差。
第二个阶段通过以下方式对第一阶段的结果进行缩放和偏移:
NormalizedScaled = Mul(Normalized, Scale)
Y = Add(NormalizedScaled, B)
来源: https://github.com/onnx/onnx/blob/main/docs/Operators.md#LayerNormalization.
- 属性
axis
int64第一阶段标准化的维度。axis的允许范围为
[-r, r)
,r为输入张量的rank,负值表示从后向前计算维度。
epsilon
float为避免除以零而使用的ε值
- 输入
input
T输入张量
scale
T缩放张量
bias
T偏置张量
- 输出
output
T标准化后的输出张量
mean
T训练过程中保存的均值,用于加速梯度计算
rstd
T训练过程中保存的标准差的倒数,用于加速梯度计算
- 类型限制
T
tensor(float16), tensor(float), tensor(double).限制输入和输出类型为浮点型
3.72. LeakyRelu¶
激活函数,对输入张量逐元素按照以下公式计算得到输出张量
y = alpha * x , if x < 0
, y = x, if x >= 0
来源: https://github.com/onnx/onnx/blob/main/docs/Operators.md#leakyrelu.
- 属性
alpha
float权重系数
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输入和输出类型为数值张量
3.73. Log¶
对输入张量逐元素进行自然对数计算得到输出张量, output = std::log(input)
。
来源: https://github.com/onnx/onnx/blob/main/docs/Operators.md#Log
- 输入
input
T输入张量
- 输出
output
T输出
input
的自然对数值
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.74. Log1p¶
对输入张量逐元素加1进行自然对数计算得到输出张量, output = std::log1p(input)
。
来源: https://pytorch.org/docs/stable/generated/torch.log1p.html?highlight=log1p#torch.log1p
- 输入
input
T输入张量
- 输出
output
T输出
input
的元素值加1后的自然对数值
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.75. Map¶
在给定的一个或一组输入张量上应用一个子图,生成一个同维度的输出张量。输出中的每个元素都是由输入张量中相应元素按子图流程计算所得到的。
来源: https://www.tensorflow.org/xla/operation_semantics?hl=en#map
- 属性
dimensions
list of ints指明映子图作用的维度。
computation
graph一个子图,用于指定输入张量的计算流程。
- 输入
input
list of T0..T{N-1}列表,输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输出类型为数值类型
3.76. Max¶
对输入张量逐元素进行最大值计算得到输出张量。所有输入和输出必须具有相同的数据类型和形状。
- 输入
lhs
T左值张量
rhs
T右值张量
- 输出
output
T输出张量
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输出类型为数值类型
3.77. MaxPool¶
在输入张量input上,根据核大小(kernel_shape)、步长(strides)和填充(padding)长度来计算最大池化。最大池化包括根据核大小计算输入张量的子集的所有值的最大值,并将数据下采样到输出张量Y中以供进一步处理。使用显式填充(padding),或使用自动填充(auto_pad)会导致输出空间形状的计算方式不同。
来源: https://github.com/onnx/onnx/blob/main/docs/Operators.md#MaxPool
- 属性
kernel_shape
list of ints沿每个轴的核大小。
strides
list of ints(可选)沿着每个轴的步长。该属性步幅默认为1。
padding
list of ints(可选)沿每个轴填充起点和终点,可以取大于或等于0的任何值。该值表示添加到相应轴的开始部分和结束部分的像素数。padding的格式应该如下[x1_begin,x2_begin…x1_end,x2_end,…],其中xi_begin是在轴’i’的开始处添加的像素的数目,xi_end是在轴`i’的结束处添加的图像的数目。此属性不能与auto_pad属性同时使用。如果不存在,则沿每个空间轴的起点和终点的填充默认为0。
dilations
list of ints(可选)膨胀(dilations)声明沿着内核的每个轴的填充间隔大小。默认为1。
auto_pad
string (默认为NOTSET)(可选)自动填充属性, 参考 AveragePool
ceil_mode
bool(默认为false)(可选)当窗口无法完全框选输入时,输出是否向上取整
return_indices
bool(默认为false)是否返回输出值在输入张量中的索引。
storage_order
int(默认为0)张量的存储顺序。0是按行存储,1是按列存储。此属性仅用于将n元索引值转换为单个整数值,以产生第二个输出。
- 输入
input
T输入张量
- 输出
output
T输出张量
Indices
T1最大值位置索引
- 类型限制
T
tensor(float16), tensor(float), tensor(double), tensor(int8), tensor(uint8)限制输入和输出类型为浮点型和8位整型
T1
tensor(int64)限制
Indices
类型为64位整型
3.78. MaxRoiPool¶
输入input张量和感兴趣区域(ROIs),并在每个感兴趣区域(ROI)上应用最大池化,从而产生一个4-D的输出张量,其形状如下 [num_RoIs,channels,pooled_shape[0],pooled_shape[1]]
。
来源: https://github.com/onnx/onnx/blob/main/docs/Operators.md#MaxRoiPool
- 属性
layout
DimensionsLayout用于指定输入布局是[N x C x H x W]或[N x H x W x C]。
pooled_shape
list of intsROI池输出形状[H x W]。
spatial_scale
float乘法空间比例因子,用于将ROI坐标从其输入比例转换为池化时使用的比例。
- 输入
input
T输入张量,维度为[N x C x H x W]或[N x H x W x C],其中N是批量大小,C是通道数,H和W是数据的高度和宽度。
rois
TROI感兴趣区域。其应是一个形状为(num_rois, 5)的二维张量,例如:[[batch_id, x1, y1, x2, y2], …]的2-D张量。
- 输出
output
T输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.79. Min¶
对输入张量逐元素进行最小值计算得到输出张量。所有输入和输出必须具有相同的数据类型和形状。
- 输入
lhs
T左值张量
rhs
T右值张量
- 输出
output
T输出张量
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输出类型为数值类型
3.80. Mish¶
激活函数,对输入张量逐元素按照以下公式计算得到输出张量:
mish(x) = x * tanh(softplus(x)) = x * tanh(ln(1 + e^{x}))
来源: https://github.com/onnx/onnx/blob/main/docs/Operators.md#Mish
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输出类型为浮点型
3.81. Neg¶
对输入张量逐元素进行相反数计算得到输出张量。
来源: https://github.com/onnx/onnx/blob/main/docs/Operators.md#Neg
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(float), tensor(int32), tensor(int8), tensor(int16), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输入和输出类型为有符号数张量
3.82. NMS¶
迭代地删除与先前选择框的交并比(IOU)大于 iou_threshold
的框。分数小于 score_threshold
的边界框也将被删除。框边界格式由属性 center_point_box
指定。注意,该算法不感知原点在坐标系中的位置,即对坐标系进行正交变换和平移变换不会导致选择不同的框。输出 selected_index
是一组索引,用于表示NMS所保存的边界框。
来源: https://github.com/onnx/onnx/blob/main/docs/Operators.md#NonMaxSuppression
- 属性
max_output_boxes_per_class
int64整数,标量,表示每批每类要选择的最大框数。默认为0,表示没有输出。
iou_threshold
float浮点,标量,用于决定框是否交并比过高的阈值。值范围[0,1]。默认为0。
score_threshold
float浮点,标量,表示根据分数决定何时删除框的阈值。
center_point_box
int32用整数表示方框数据的格式,有0和1两种选择。默认值为0,值为0时,框数据表示为[y1, x1, y2, x2],其中[y1, x1]和[y2, x2]是对角坐标,并且坐标可以被提供为归一化的(即位于区间[0, 1]中)或绝对的,主要用于TF模型。值为1时框数据以[x_center, y_center, width, height]的形式提供,主要用于Pytorch模型。
- 输入
boxes
float形状为[num_batches, spatial_dimension, 4]的输入张量,单框数据格式由center_point_box表示。
scores
float形状为[num_batches, num_classes, spatial_dimension]的输入张量,表示每个框的得分。
- 输出
selected_indices
int64从boxes张量中保留的框索引,形如[num_selected_index, 3],所选索引格式为[batch_index, class_index, box_index]。
3.83. NonZero¶
返回非零元素的索引值数组,该数组是一个2-D张量,其中每一行表示单个非零元素的索引值坐标。NonZero的行为类似于torch.NonZero。
来源: https://pytorch.org/docs/stable/generated/torch.nonzero.html
- 输入
input
T输入张量
- 输出
output
int64输出张量
- 类型限制
T
: 输入支持所有类型
3.84. Not¶
对输入张量逐元素进行逻辑非计算得到输出张量。
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(bool)限制输入和输出类型为布尔张量
3.85. Or¶
对输入张量逐元素进行逻辑或计算得到输出张量, output = lhs || rhs
- 属性
broadcast_dimensions
list of ints(可选)指定需要被广播的维度
- 输入
lhs
T逻辑运算的第一个输入
rhs
T逻辑运算的第二个输入
- 输出
output
T输出
lhs || rhs
的值
- 类型限制
T
tensor(bool)限制输入和输出类型为布尔
3.86. Pad¶
给定一个待填充数据的输入张量,指定各个维度起始和末尾要填充的数量、 填充模式(mode)、常量值(padding_value),就可以生成一个填充后的输出张量。
- 属性
mode
enum支持四种填充模式: PAD_VALUE,PAD_EDGE,PAD_REFLECT,PAD_SYMMETRIC
PAD_VALUE: 使用输入
padding_value
指定的常量值填充PAD_EDGE: 使用输入张量的边缘值填充
PAD_REFLECT: 使用输入张量沿每个轴的起始值和末尾值的镜像进行填充,起始值和末尾值为镜面,
[n-2, n-1, n, (n-1), (n-2)], ()内为填充值
PAD_SYMMETRIC: 使用输入张量沿每个轴的起始值和末尾值的对称值进行填充,
[n-2, n-1, n, (n), (n-1)], ()内为填充值
edge_padding_low
int低端边缘填充,指定在每个维度的索引0旁添加的填充量。边缘填充的数量可以是负数——负数填充的绝对值表示要从指定维度中删除的元素数量。
edge_padding_high
int高端边缘填充,指定在每个维度的索引最大值旁添加的填充量。
interior_padding
int指定在每个维度中的任意两个元素之间添加的填充量;它可能不是负值。内部填充在逻辑上发生在边缘填充之前,因此在边缘填充为负的情况下,会从内部填充操作后的数据中删除元素。
- 输入
input
T输入张量
padding_value
T当
mode
为 PAD_VALUE 时的填充值,为标量。
- 输出
output
T填充后的输出张量。
- 类型限制
T
: 输入和输出支持所有数值类型。
3.87. PartialReduce¶
3.88. PopulationCount¶
逐元素计算输入张量的二进制表示中1的个数。
- 输入
input
T输入张量
- 输出
output
int输出张量
- 类型限制
T
: tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64)
输入支持无符号整型。
3.89. Pow¶
对输入张量逐元素按照以下公式计算得到输出张量:
f(x)=x^exponent
- 输入
lhs
T输入张量,作为底数。
rhs
T1指数张量
- 输出
output
T输出张量
- 类型限制
T
tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)输入和输出支持浮点型和整型。
T1
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)指数张量支持浮点型和整型。
3.90. PRelu¶
激活函数,将输入张量和斜率张量作为输入,并产生一个输出,对输入张量逐元素按照以下公式计算得到输出张量:
f(x) = slope * x for x < 0, f(x) = x for x >= 0
来源:https://github.com/onnx/onnx/blob/main/docs/Operators.md#PRelu
- 输入
input
T输入张量
slope
T斜率张量
- 输出
output
T输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double), tensor(uint32), tensor(uint64), tensor(int32), tensor(int64)输入和输出支持浮点型和整型
3.91. Real¶
对输入张量逐元素计算复数的实部得到输出张量。
- 输入
input
T输入张量
- 输出
output
T1输出复数实部张量
- 类型限制
T
tensor(complex64), tensor(complex128), tensor(float16), tensor(float), tensor(double)输入类型限制为复数或浮点型
T1
tensor(float16), tensor(float), tensor(double)输出类型限制为浮点型
3.92. RealDynamicSlice¶
对输入张量进行切片,与slice算子区别在于,边界框是由动态输入的start_indices,limit_indices和strides进行定义,切片范围为 [start, end)
。 输入axes则指定进行切片的维度,如果axes为空,则对所有维度进行切片,否则对指定维度切片。
- 输入
input
T输入张量
start_indices
Tind一维张量,包含指定维度的切片起始索引,如axes为空,则维度大小等于输入张量的rank
limit_indices
Tind一维张量,包含指定维度的切片终止索引,如axes为空,则维度大小等于输入张量的rank
strides
Tind一维张量,包含切片输入步长,切片将在指定维度d上隔strides[d]取一次值,如axes为空,则维度大小等于输入张量的rank规定
strides> 0
axes
Tind一维张量,指定要进行切片的维度,负值表示从后向前计算维度,范围为
[-r, r-1]
- 输出
output
T输出切片的子张量
- 类型限制
T
: 输入和输出支持所有类型Tind
tensor(int32), tensor(int64)限制索引类型为整型
3.93. Reduce¶
对输入张量的指定维度进行指定函数的计算,使得指定维度还原为标量。输出张量的rank为 rank(output) = rank(input) - len(dimensions)
。当输入张量个数大于1时,计算函数仅支持max、min,且仅在第一个输入张量中进行计算,第2-N个输入张量按照第一个张量的max或min值的索引处取值。
- 属性
dimensions
list of ints指定还原维度
type
string(可选)用于指定计算类型
computation
enum计算类型,支持UPDATE、ADD、SUB、MUL、DIV、MIN、MAX、AND、OR、XOR、ARGMIN、ARGMAX、L2、COUNT
- 输入
inputs
list of T输入张量
init_values
list of T标量,每个维度计算的初始值
- 输出
outputs
list of T输出张量
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输入和输出类型为数值类型
3.94. ReduceWindow¶
对输入张量的每个窗口中的所有元素应用Reduce函数,产生一个张量作为输出。 每个输出张量的元素数与窗口的有效位置数相同,池化层可以用ReduceWindow来表示。 与Reduce类似,computation总是通过左侧的init_values进行。 仅当computation为ARGMIN或ARGMAX时,支持N个输入张量。
来源: https://www.tensorflow.org/xla/operation_semantics#reducewindow。 与xla的语义不同的是,我们将padding拆解为auto_pad和ceil_mode两个属性。
- 属性
computation
enumreduce计算方式,窗口中的所有元素以computation的定义进行计算。 支持的计算包括: UPDATE、ADD、SUB、MUL、DIV、MIN、MAX、AND、OR、XOR、ARGMIN、ARGMAX、L2、COUNT
window_dimensions
list of ints窗口的维度大小,数组大小为输入张量的rank
window_strides
list of ints(默认为1)(可选)指定窗口移动的步长,数组大小为输入张量的rank
base_dilations
list of ints(默认为1)(可选)指定输入张量行内填充的值,数组大小为输入张量的rank
window_dilations
list of ints(默认为1)(可选)指定窗口行内填充的值,数组大小为输入张量的rank
auto_pad
string(默认为NOTSET)(可选)自动填充模式,必须为NOTSET、SAME_UPPER、SAME_LOWER或VALID。
NOTSET表示使用显式填充。
SAME_UPPER或SAME_LOWER表示填充输入,使得每个维度d
output_shape[d] = ceil(input_shape[d] / strides[d])
。 在填充数量为偶数时,填充在input两边平分,而在填充数量为奇数时,SAME_UPPER表示在input的末尾添加额外的填充,SAME_LOWER表示在input的起始添加额外的填充。VALID则表示不做填充。
ceil_mode
bool(默认为false)(可选)当窗口无法完全框选输入时,输出是否向上取整
- 输入
inputs
list of T输入张量
init_values
list of T标量,做Reduce操作应用的初始值,详情见 Reduce
- 输出
outputs
list of T输出张量
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输入和输出类型为数值类型
3.95. Relu¶
激活函数,对输入张量逐元素按照以下公式计算得到输出张量:
y = max(0, x)
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(float), tensor(int32), tensor(int8), tensor(int16), tensor(int64), tensor(float16), tensor(double)限制输入和输出类型为有符号型数值类型
3.96. Relu6¶
同Relu,对输入张量逐元素按照以下公式计算得到输出张量:
y = min(max(0, x), 6)
,限制最大输出为6。
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(float), tensor(int32), tensor(int8), tensor(int16), tensor(int64), tensor(float16), tensor(double)限制输入和输出类型为有符号型数值类型
3.97. Rem¶
对输入张量逐元素进行余数计算得到输出张量
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输入和输出类型为数值类型
3.98. Reshape¶
改变输入张量的形状为输出形状。
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
: 输入和输出支持所有类型
3.99. Resize¶
调整输入张量的大小。输出张量中的每个位置通过坐标转换映射到输入张量中并计算原位置邻域(又称采样位置)的加权平均值。如果输入 sizes
没有被指定,则输出张量的每个维度值为:
output_dimension = floor(input_dimension * (roi_end - roi_start) * scale)
来源: https://github.com/onnx/onnx/blob/rel-1.14.1/docs/Operators.md#Resize
- 属性
mode
enum三种插值模式: “NEAREST”(默认)、”LINEAR”和 “CUBIC”。”LINEAR”模式包括一维张量的线性插值和 N-D 张量的 N 次线性插值(例如,二维张量的双线性插值)。”CUBIC”模式包括一维张量的立方插值和 N-D 张量的 N 次立方插值(例如,二维张量的双立方插值)。
coordinate_transformation_mode
enum该属性描述了如何将输出张量中的坐标转换为原始输入张量中的坐标。
每个维度的坐标都是单独转换的。以 x 轴为例进行说明,x_resized 表示输出张量中 x 轴的坐标,x_original 表示原始输入张量中 x 轴的坐标,length_original 表示原始输入张量在 x 轴上的长度,length_resized 表示输出张量在 x 轴上的长度,
scale = length_resized / length_original
如果
coordinate_transformation_mode
为 HALF_PIXEL(默认):x_original = (x_resized + 0.5) / scale - 0.5
如果
coordinate_transformation_mode
为 ASYMMETRIC:x_original = x_resized / scale
如果
coordinate_transformation_mode
为 PYTORCH_HALF_PIXEL:x_original = length_resized > 1 ? (x_resized + 0.5) / scale - 0.5 : 0
如果
coordinate_transformation_mode
为 TF_HALF_PIXEL_FOR_NN:x_original = (x_resized + 0.5) / scale
如果
coordinate_transformation_mode
为 ALIGN_CORNERS:x_original = x_resized * (length_original - 1) / (length_resized - 1)
如果
coordinate_transformation_mode
为 TF_CROP_AND_RESIZE:x_original = length_resized > 1 ? start_x * (length_original - 1) + x_resized * (end_x - start_x) * (length_original - 1) / (length_resized - 1) : 0.5 * (start_x + end_x) * (length_original - 1)
exclude_outside
**如果设置为 true,张量之外的采样位置的权重将设置为 0,权重将重新归一化,使其总和为 1。
nearest_mode
enum(默认为ROUND_PREFER_FLOOR)(可选)四种模式: ROUND_PREFER_FLOOR(默认,即向下取整一半)、ROUND_PREFER_CEIL(即向上取整一半)、FLOOR、CEIL,仅用于最邻近插值模式。它表示如何从 x_original 获取输入张量中 “最近 “的像素,因此该属性只有在
mode
为 NEAREST 时才有效。
extrapolation_value
float(默认为0.0)(可选)当
coordinate_transformation_mode
为 TF_CROP_AND_RESIZE 且 x_original 不在 [0, length_original - 1] 范围内时,该值将被用作相应的输出值。
cubic_coeff_a
float(默认为-0.75)(可选)用于”CUBIC”插值模式的系数”a”, 该属性仅在模式为 CUBIC 时有效。
- 输入
input
T1输入张量
roi
T2一维张量,形式为[start1, …, startN, end1, …, endN],其中 N 是输入张量的rank。RoIs 的坐标在输入图像的坐标系中进行归一化处理。只有当
coordinate_transformation_mode
为 TF_CROP_AND_RESIZE 时才会生效。
scales
tensor(float)每个维度的缩放倍数。如果小于 1,则进行下采样,否则进行上采样。
scales
的元素个数应与输入张量的rank相同。必须指定scales
和sizes
中的一个,如果两个都指定则会报错。如果需要指定sizes
,用户可以在此操作符的输入列表中将scales
置为空。
sizes
tensor(int)输出张量的目标大小,
sizes
的元素个数应与输入张量的rank相同,scales
和sizes
只能指定一个。
- 输出
output
T1输出目标大小的张量
- 类型限制
T1
: 输入和输出支持所有类型T2
tensor(float16), tensor(float), tensor(double)限制roi类型为浮点型
3.100. Reverse¶
按照指定维度反转输入张量中元素的顺序,生成相同形状的输出张量。输入张量中每个元素的多维索引(指定维度)都会以转换后的索引存储到输出张量中,多维索引的转换是通过反转每个要反转维度的索引实现的(即如果大小为 N 的维度是反转维度之一,则其索引 i 将转换为 N - 1 - i)。
来源: https://www.tensorflow.org/xla/operation_semantics#rev_reverse
- 属性
dimensions
list of ints指定要反转的维度
- 输入
input
T输入张量
- 输出
output
T对指定维度进行反转后的输出张量
- 类型限制
T
: 输入和输出支持所有类型
3.101. ReverseSequence¶
将一个输入张量先按照批次维度进行分割,然后将分割后的子张量在指定的时间维度上进行翻转操作,对于在批次维度上的每个分片 i,ReverseSequence会反转时间维度上的前sequence_lens[i]个元素,并将索引超出 sequence_lens[i] 的元素复制到输出张量中。
- 属性
batch_axis
int(默认为1)(可选)指定批次维度。只能为 1(默认值)或 0 。
time_axis
int(默认为0)(可选)指定时间维度。只能为 0(默认值)或 1 。
- 输入
input
T输入张量,要求
rank >= 2
sequence_lens
tensor(int)指定批次中序列长度的张量。它的形状是
[batch_size]
。
- 输出
output
T输出张量
- 类型限制
T
: 输入和输出支持所有类型
3.102. RngNormal¶
用按照正态分布 N(mu, sigma)
生成的随机数构建给定形状的输出,正态分布的参数由 mean 和 scale 指定。
来源: https://www.tensorflow.org/xla/operation_semantics?hl=en#rngnormal
- 属性
seed
int(默认为1)(可选)不指定的情况下,用时间戳生成随机种子。否则,使用
seed
的值作为随机种子。
- 输入
mu
T标量,指定生成数的平均值
sigma
T标量,指定生成数的标准差
shape
T1指定输出张量的形状
- 输出
output
T输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制类型为浮点型
T1
tensor(int32), tensor(int64)限制
shape
类型为整型
3.103. RngUniform¶
用在区间 [a, b)
上按均匀分布生成的随机数构建给定形状的输出,参数和输出元素类型必须是布尔类型、积分类型或浮点类型,且类型必须一致
来源: https://www.tensorflow.org/xla/operation_semantics?hl=en#rnguniform
- 属性
seed
int(默认为1)(可选)不指定的情况下,用时间戳生成随机种子。否则,使用
seed
的值作为随机种子。
- 输入
a
T标量,指定区间的下限
b
T标量,指定区间的上限
shape
T1指定输出张量的形状
- 输出
output
T输出张量
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制类型为数值类型
T1
tensor(int32), tensor(int64)限制
shape
类型为整型
3.104. RoiAlign¶
Mask R-CNN论文中描述的感兴趣区域特征聚集操作。RoiAlign传入输入张量 X 和感兴趣区域(rois),对每个感兴趣区域进行池化处理,产生一个形状为[num_rois, C, output_height, output_width]的四维张量。在将原始图像转换为特征图和将特征图转换为 RoI 特征的过程中,RoiAlign 将通过去除量化来避免错位,在每个 ROI 中,通过双线性插值法直接计算采样位置的值。
- 属性
mode
enum池化方法,支持两种模式:平均池化
ROIALIGN_AVG
和最大值池化ROIALIGN_MAX
,默认为平均池化
coordinate_transformation_mode
int允许的值是
ROIALIGN_HALF_PIXEL
和ROIALIGN_OUTPUT_HALF_PIXEL
。使用ROIALIGN_HALF_PIXEL
可将输入坐标的像素点偏移-0.5(推荐使用)。使用ROIALIGN_OUTPUT_HALF_PIXEL
(输出半像素)可省略输入的像素移动(使用此值可实现向后兼容)。
output_height
int(默认为1)池化输出张量的高度
output_width
int(默认为1)池化输出张量的宽度
sampling_ratio
int(默认为0)用于计算在插值网格中每个池化输出值的采样点数。如果大于0,则使用 sampling_ratio x sampling_ratio 网格点。如果等于0,则使用自适应网格点数(计算公式为 ceil(roi_width / output_width),高度也是如此)。
spatial_scale
float(默认为1.0)空间比例因子,用于将 ROI 坐标从其输入空间比例转换为特征聚集时使用的比例,即输入特征图相对于输入图像的空间比例。例如,默认值为 1.0f。
- 输入
input
T1输入张量
rois
T1输入张量
batch_indices
T2输入张量
- 输出
output
T1RoI 池化输出形状为[num_roi, C, output_height, output_width]的四维张量。
- 类型限制
T1
tensor(float16), tensor(float), tensor(double)限制类型为浮点型
T1
tensor(int64)限制
batch_indices
类型为整型
3.105. Round¶
对输入张量逐元素进行四舍五入计算得到输出张量,即为每个值找出最接近的整数,如:Round(0.5) = 1; Round(1.5) = 2; Round(2.3) = 2; Round(2.5) = 3。输出张量的形状和类型与输入张量相同。
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.106. RoundNearestEven¶
对输入张量逐元素进行最近舍入计算得到输出张量,对.5的舍入上,采用取偶数的方式,如:RoundNearestEven(0.5) = 0; RoundNearestEven(1.5) = 2; RoundNearestEven(2.5) = 2
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.107. Rsqrt¶
对输入张量逐元素进行到倒平方根计算得到输出张量, output = 1 / input^0.5
,如果input为负数或者0, 则返回NAN。
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输入和输出类型为数值类型
3.108. ScatterND¶
在 input
张量中进行多次选定切片窗口位置, 然后将 updates
张量中相应的切片散射到选定切片窗口, 窗口中每个元素散射时按 computation
计算方式进行。
首先根据输入 start_indices
中散射切片的起始索引和属性 index_vector_dim
以及 scatter_dims_to_operand_dims
计算 input
中散射切片窗口的起始索引值。
其次根据属性 updates
中的散射切片与 input
中相应起始索引位置的窗口进行 computation
方式散射, 最终得到输出 output
。
来源: https://www.tensorflow.org/xla/operation_semantics#scatter
- 属性
computation
enumscatter计算方式, 计算窗口中的所有元素以computation的定义进行计算。 支持的计算包括: UPDATE, ADD, SUB, MUL, DIV, MIN, MAX, AND, OR, XOR, ARGMIN, ARGMAX, L2, COUNT
index_vector_dim
int指定
start_indices
中index所在维度,有效值范围[0, start_indices.rank],当index_vector_dim == start_indices_rank
时index_size为1,当index_vector_dim < start_indices.rank - 1
时需要进行Transpose将index_vector_dim挪到最后(最右边)维度
update_window_dims
list of ints输入
updates
维度中用于更新切片维度的更新维度索引集合
inserted_window_dims
list of ints插入维度的维度索引集合, 与更新维度相结合得到更新切片维度
scatter_dims_to_operand_dims
list of intsstart_indices
中每个index (大小可小于input.rank) 数组中每个值映射到input
完整index的位置,其他未映射位置为0,从而得到完整的input
index,用来作为多次散射切片的起始索引
indices_are_sorted
bool(默认为false)输入
scatter_indices
中的索引是否已经排序
unique_indices
bool(默认为false)输入
scatter_indices
中的索引是否唯一
- 输入
input
T输入张量
scatter_indices
T散射切片的起始位置,可包含多个batch维度和一个index维度,多数情况下batch维度在前,index维度在最后,即[batch1, batch2, …, index_size],index_size所在位置由index_vector_dim指定
updates
T包含用于散射切片元素值的张量,维度包含batch维度和
update_window_dims
两部分,如果update_window_dims
不是updates
最后维度,则需要将其Transpose到最后维度
- 输出
output
T输出张量, 与输入张量具有相同的形状
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(half), tensor(bfloat16), tensor(float), tensor(double).限制输入和输出类型为数值张量
3.109. Select¶
根据 pred
张量的值, 从 on_true
和 on_false
两个输入张量的元素构建输出张量。
on_true
和 on_false
张量必须具有相同的形状, 输出张量的形状也与它们相同。
pred
张量必须具有与 on_true
和 on_false
张量相同的维度, 或者是一个具有元素类型为 bool 的标量。
来源: https://www.tensorflow.org/xla/operation_semantics#select 输入
pred
bool第一个输入张量
on_true
T第二个输入张量
on_false
T第三个输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double), tensor(bfloat16)限制输出类型为数值张量
3.110. SelectAndScatter¶
SelectAndScatter是一个复合操作, 首先在 input
张量上执行 ReduceWindow 操作, 以从每个窗口中选择一个元素, 然后将源张量相应元素散射到选定元素位置上, 以构建一个与 input
张量相同形状的输出张量。
来源: https://www.tensorflow.org/xla/operation_semantics#selectandscatter
- 属性
select_type
stringselect计算方式, 窗口中的所有元素以select_type的定义进行比较计算。支持的计算方式包括: GE, GT, LE, LT
computation
enumscatter计算方式, 窗口中的所有元素以computation的定义进行计算。 支持的计算包括: UPDATE, ADD, SUB, MUL, DIV, MIN, MAX, AND, OR, XOR, ARGMIN, ARGMAX, L2, COUNT
window_dimensions
list of ints窗口的维度大小, 数组大小为输入张量的rank
window_strides
list of ints指定窗口移动的步长, 数组大小为输入张量的rank
padding
list of ints对输入张量每个维度的起点和终点的填充, 可以是大于或等于 0 的任意值, 该值表示在相应维度的起点和终点部分添加的像素数。 padding的格式如下[x1_begin, x2_begin…x1_end, x2_end,…], 其中 xi_begin 表示在维度i的开始部分添加的像素数, xi_end 表示在维度i的结束部分添加的像素数
- 输入
input
T输入张量
source
T散射到选定元素索引上的源张量
init_value
T用于初始化
output
张量的初始值, 以一个标量张量来表示。
- 输出
output
T输出张量
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(half), tensor(bfloat16), tensor(float), tensor(double)限制输入类型为数值型张量
3.111. SetDimensionSize¶
设置给定维度的动态尺寸。输入必须是形状。
来源:https://www.tensorflow.org/xla/operation_semantics?hl=en#setdimensionsize
属性
- dimension
: int
区间
[0, n)
中的一个值,用于指定维度。
- 输入
input
T输入张量
size
int指定运行时形状的动态大小。
- 输出
output
T输出张量
- 类型限制
T
: 输入和输出支持所有类型。
3.112. Shape¶
将张量作为输入, 并输出包含输入张量形状的1维的int64张量。
来源: https://github.com/onnx/onnx/blob/main/docs/Operators.md#Shape
- 属性
start
int(默认为0)(可选)指定对输出的形状张量的切片的起始轴, 负值表示从后往前开始计算。
end
int(默认为1024)(可选)切片形状的结束轴。负值表示从后面开始计算尺寸。如果省略,则切片包括最后一个轴之前(包含)的所有轴。
- 输入
input
T输入张量
- 输出
output
To输出张量,表示输入张量的形状
- 类型限制
T
: 输入支持所有类型To
tensor(int64)限制输出类型为整型
3.113. ShiftLeft¶
左移位运算将输入元素的二进制表示逐元素向左位移。例如lhs=[1, 2],rhs=[1, 2],则相应的输出为[2, 8]。
- 输入
lhs
T输入张量,用于移位
rhs
int指定移位量
- 输出
output
T输出张量。
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64)限制输入和输出类型为无符号整型。
3.114. ShiftRightArithmetic¶
3.115. ShiftRightLogical¶
3.116. Sigmoid¶
激活函数,对输入张量逐元素按照以下公式计算得到输出张量:
y=1/(1+exp(-x))
- 输入
input
T输入张量,用于移位。
- 输出
output
T输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型。
3.117. Sign¶
激活函数,对输入张量逐元素按照以下公式计算得到输出张量:
y = 1, if x > 0
y = -1, if x < 0
y = 0, if x = 0
来源:https://github.com/onnx/onnx/blob/main/docs/Operators.md#Sign
- 输入
input
T输入张量
- 输出
output
T逐元素计算的输入张量的符号。它和输入具有相同的形状类型。
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输入和输出类型为数值类型
3.118. Sin¶
对输入张量逐元素进行正弦计算得到输出张量。
- 输入
input
T输入张量
- 输出
output
T逐元素计算的输入张量的正弦值。它和输入具有相同的形状类型。
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型。
3.119. Sinh¶
对输入张量逐元素进行双曲正弦计算得到输出张量。
- 输入
input
T输入张量
- 输出
output
T逐元素计算的输入张量的双曲正弦值。它和输入具有相同的形状类型。
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型。
3.120. Silu¶
激活函数,对输入张量逐元素按照以下公式计算得到输出张量:
y=x * sigmoid(x)
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型。
3.121. Size¶
获取输入张量的大小。
来源: https://github.com/onnx/onnx/blob/main/docs/Operators.md#Size
- 输入
input
T输入张量
- 输出
output
To输入张量的元素总数
- 类型限制
T
tensor(uint32), tensor(uint64), tensor(int32), tensor(int64)限制输入类型为整型张量
To
tensor(int64)限制输出类型为有符号整型张量
3.122. Slice¶
对输入张量进行切片,切片得到的子张量与输入张量具有相同的rank,在每一维度上通过上
界和下界组成的边界框进行切分,边界框则由属性进行定义,切片范围为 [start, end)
。
来源: https://www.tensorflow.org/xla/operation_semantics#slice
- 属性
start_indices
list of intsN个整数的列表,包含每个维度的切片起始索引,其中
N = rank
limit_indices
list of intsN个整数的列表,包含每个维度的切片终止索引,其中
N = rank
strides
list of intsN个整数的列表,包含切片输入步长,其中
N = rank
,切片将在每个维度d上隔strides[d]取一次值。 规定strides > 0
- 输入
input
T输入张量
- 输出
output
T输出切片的子张量
- 类型限制
T
: 输入和输出支持所有类型
3.123. SliceInDim¶
3.124. Softmax¶
计算输入张量的归一化指数值。
来源: https://github.com/onnx/onnx/blob/main/docs/Operators.md#softmax
- 属性
axis
int(默认为-1)(可选)描述执行softmax计算的维度,axis为负值表示从从最后一个维度开始往前计算. axis接受的范围为[-r, r-1],其中r为输入张量的rank
accurate
bool(默认为false)(可选)如果accurate为true,则该计算将沿着指定轴分别找到每个向量中的最大值,随后各个向量中的每个元素减去对应的最大值
logarithmic
bool(默认为false)(可选)如果logarithmic为true,则输出结果会再进行一次log运算
epsilon
float(默认为0)(可选)用于避免数值不稳定和除0运算,softmax计算中的分母会和epsilon取最大值当作最终的分母
- 输入
input
T输入张量,rank >= axis
- 输出
output
T输出张量,与输入张量具有相同的形状
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.125. Softplus¶
激活函数,使对输入张量逐元素按照以下公式计算得到输出张量:
y = 1/β * ln(exp(β * x) + 1)
来源: https://pytorch.org/docs/stable/generated/torch.nn.Softplus.html
- 属性
beta
T(可选)β默认为。
threshold
T(可选)高于此值的值将恢复为线性函数。默认值:20。
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.126. Sort¶
对输入张量进行排序。如果只提供一个张量,它将按降序或升序对指定维度的张量进行排序。 如果提供了一个以上的张量,它将把所有张量排序在一起(只比较第一个张量中的元素)。
来源: https://www.tensorflow.org/xla/operation_semantics#sort
- 属性
dimension
int要排序的维度
descending
bool是否使用降序
is_stable
bool是否应使用稳定的排序
- 输入
inputs
list of T输入张量
- 输出
output
list of T输出张量
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输入和输出类型为数值类型
3.127. SpaceToDepth¶
SpaceToDepth将空间数据块按深度重新排列。更具体地说,该操作输出输入张量的副本,其中来自高度和宽度维度的值被移动到深度维度。
来源:https://github.com/onnx/onnx/blob/main/docs/Operators.md#SpaceToDepth
- 属性
space_dims
list of ints用于指定高度和宽度所在维度。
blocksize
int用于移动的block尺寸。
depth_dim
int用于指定深度所在维度。
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
: 支持所有类型。
3.128. Sqrt¶
对输入张量逐元素进行算术平方根计算得到输出张量。
来源:https://github.com/onnx/onnx/blob/main/docs/Operators.md#Sqrt
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.129. Squeeze¶
从张量的形状中删除大小为1的维度。如果未指定维度,则将从形状中删除所有大小为1的维度。 如果指定的维度值不为1,则会报错。对于动态形状,如果没有提供维度,则只考虑静态形状。
来源: https://github.com/onnx/onnx/blob/main/docs/Operators.md#Squeeze
- 输入
input
T输入张量,至少具有max(dims)维度的张量。
axes
Ta指定要删除的维度。负值表示从后面开始计算尺寸,可接受的范围为
[-r,r-1]
,其中r=rank(input)。
- 输出
output
T输出张量,与输入具有相同的数据。
- 类型限制
T
: 输入和输出支持所有类型Ta
tensor(int32), tensor(int64)限制
axes
类型为整型
3.130. Sub¶
对两个输入张量逐元素进行减法计算得到输出张量
- 输入
lhs
T输入张量,被减数
rhs
T输入张量,减数
- 输出
output
T输出张量
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输入和输出类型为数值类型
3.131. Swish¶
激活函数,对输入张量逐元素按照以下公式计算得到输出张量:
y = x / (1 + exp(-x))
- 输入
input
T输入张量
- 输出
output
T输出张量
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.132. Tan¶
对输入张量逐元素进行正切计算得到输出张量, output = std::tan(input)
- 输入
input
T输入张量
- 输出
output
T输出
input
的正切值
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.133. Tanh¶
对输入张量逐元素进行双曲正切计算得到输出张量, output = std::tanh(input)
- 输入
input
T输入张量
- 输出
output
T输出
input
的双曲正切值
- 类型限制
T
tensor(float16), tensor(float), tensor(double)限制输入和输出类型为浮点型
3.134. Tile¶
3.135. Topk¶
读取沿指定维度最大或最小的前 K 个元素。
来源: https://github.com/onnx/onnx/blob/rel-1.14.1/docs/Operators.md#TopK
- 属性
axis
int指定进行排序的维度。
sorted
bool(默认为true)是否按顺序返回元素。
largest
bool(默认为true)是返回前 K 个最大元素(默认)还是最小元素。
- 输入
input
T输入张量
k
tensor(int)一维张量,包含单个正值指定要检索的元素个数。
- 输出
output
T形状为 [a_1, a_2, …, a_{axis-1}, k, a_{axis+1}, … a_n] 的张量,包含输入张量的前 K 个值
indices
tensor(int)形状为 [a_1, a_2, …, a_{axis-1}, k, a_{axis+1}, … a_n] 的张量,包含前 K 个值的对应输入张量索引。
- 类型限制
T
tensor(uint8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(int8), tensor(int16), tensor(int32), tensor(int64), tensor(float16), tensor(float), tensor(double)限制输入和输出类型为数值类型
3.136. Transpose¶
对输入张量进行Transpose,类似于numpy.Transpose。例如,当permutation=(1,0,2)时,给定形状为(1,2,3)的输入张量,输出形状将为(2,1,3)。
来源: https://github.com/onnx/onnx/blob/main/docs/Operators.md#Transpose
- 属性
permutation
list of ints整数列表,根据给定的值排列轴。
- 输入
input
T输入张量
- 输出
output
T输出重新排列后的张量
- 类型限制
T
: 输入和输出支持所有类型
3.137. Trilu¶
给定一个二维矩阵或一批二维矩阵,返回张量的上三角部分或下三角部分。
Trilu取一个形状为 [*,N,M]
的输入张量,其中 *
为零或多个批维度。上三角形部分由给定对角线(k)上的元素组成。下三角部分由对角线上和对角线下的元素组成。矩阵中的所有其他元素都设置为零。
来源: https://github.com/onnx/onnx/blob/main/docs/Operators.md#Trilu
- 属性
upper
bool指示是保留矩阵的上三角部分还是下三角部分。
k
int该值对应于与主对角线上方或下方第几个对角线。
- 输入
input
Trank>=2的输入张量
- 输出
output
T与输入张量具有相同类型和形状的输出张量。
- 类型限制
T
: 输入和输出支持所有类型
3.138. Tuple¶
3.139. Unsqueeze¶
将维度大小1的项插入到输入张量的形状中。输入轴张量中包含维度索引列表,用于在输出张量的相应索引中插入值为1的维度。
- 输入
input
T输入张量,至少具有max(dims)维度的张量。
axes
Ta输入轴张量,包含维度索引列表。
- 输出
output
T输出张量。
- 类型限制
T
: 输入和输出支持所有类型Ta
tensor(int32), tensor(int64)限制输入axes类型为整型张量
3.140. While¶
3.141. Xor¶
逐元素做逻辑异或运算, output = lhs ^ rhs
- 属性
broadcast_dimensions
list of ints(可选)指定需要被广播的维度
- 输入
lhs
T逻辑运算的第一个输入
rhs
T逻辑运算的第二个输入
- 输出
output
T输出
lhs ^ rhs
的值
- 类型限制
T
tensor(bool)限制输入和输出类型为布尔