MindSpore隐式类型转换的算子支持

Linux Ascend GPU CPU 模型开发 初级 中级 高级

隐式类型转换

转换规则

  • 标量与Tensor运算:运算时,将标量自动转为Tensor,数据类型和参与运算的Tensor数据类型保持一致;当Tensor是bool数据类型,标量是int或float时,将标量和Tensor都转为数据类型为int32或float32的Tensor;当Tensor是int或者uint数据类型,标量是float时,将标量和Tensor都转为数据类型为float32的Tensor。

  • 不同数据类型Tensor运算:数据类型优先级排序为bool < uint8 < int8 < int16 < int32 < int64 < float16 < float32 < float64,运算时,先确定参与运算的Tensor中优先级相对最高的数据类型,然后将低优先级数据类型Tensor转换为相对最高优先级数据类型;而当int8和uint8数据类型的Tensor进行运算时,将其都转为int16的Tensor。

  • 不支持对Parameter进行数据类型转换:如果按照转换规则推导,需要对网络中定义的Parameter进行数据类型转换时,会抛出RuntimeError异常。

参与转换的数据类型

  • bool

  • int8

  • uint8

  • int16

  • int32

  • int64

  • float16

  • float32

  • float64

支持算子

算子名
mindspore.ops.Assign
mindspore.ops.AssignSub
mindspore.ops.ApplyMomentum
mindspore.ops.FusedSparseAdam
mindspore.ops.FusedSparseLazyAdam
mindspore.ops.FusedSparseFtrl
mindspore.ops.FusedSparseProximalAdagrad
mindspore.ops.ApplyAdaMax
mindspore.ops.ApplyAdadelta
mindspore.ops.ApplyAdagrad
mindspore.ops.ApplyAdagradV2
mindspore.ops.SparseApplyAdagrad
mindspore.ops.SparseApplyAdagradV2
mindspore.ops.ApplyProximalAdagrad
mindspore.ops.SparseApplyProximalAdagrad
mindspore.ops.ApplyAddSign
mindspore.ops.ApplyPowerSign
mindspore.ops.ApplyGradientDescent
mindspore.ops.ApplyProximalGradientDescent
mindspore.ops.SparseApplyFtrl
mindspore.ops.SparseApplyFtrlV2
mindspore.ops.BitwiseAnd
mindspore.ops.BitwiseOr
mindspore.ops.BitwiseXor
mindspore.ops.TensorAdd
mindspore.ops.Add
mindspore.ops.Sub
mindspore.ops.Mul
mindspore.ops.Pow
mindspore.ops.Minimum
mindspore.ops.Maximum
mindspore.ops.RealDiv
mindspore.ops.Div
mindspore.ops.DivNoNan
mindspore.ops.FloorDiv
mindspore.ops.TruncateDiv
mindspore.ops.TruncateMod
mindspore.ops.Mod
mindspore.ops.FloorMod
mindspore.ops.Atan2
mindspore.ops.SquaredDifference
mindspore.ops.Xdivy
mindspore.ops.Xlogy
mindspore.ops.Equal
mindspore.ops.ApproximateEqual
mindspore.ops.NotEqual
mindspore.ops.Greater
mindspore.ops.GreaterEqual
mindspore.ops.Less
mindspore.ops.LessEqual
mindspore.ops.LogicalAnd
mindspore.ops.LogicalOr
mindspore.ops.ScatterNdUpdate
mindspore.ops.ScatterNdAdd
mindspore.ops.ScatterNdSub
mindspore.ops.ScatterNonAliasingAdd
mindspore.ops.ScatterUpdate
mindspore.ops.ScatterMax
mindspore.ops.ScatterMin
mindspore.ops.ScatterAdd
mindspore.ops.ScatterSub
mindspore.ops.ScatterMul
mindspore.ops.ScatterDiv
mindspore.ops.AssignAdd