转换

转换 - 23

版本

  • 名称: 转换 (GitHub)

  • : main

  • 自版本: 23

  • 函数: False

  • 支持级别: SupportType.COMMON

  • 形状推断: True

此版本的算子自版本 23起可用。

摘要

该算子将给定输入张量中的元素转换为“to”参数指定的类型,并返回一个以转换类型表示的相同大小的输出张量。“to”参数必须是 TensorProto 消息的“DataType”枚举字段中指定的类型之一。

支持将普通 (例如,“3.14”和“1000”) 和科学数值表示 (例如,“1e-5”和“1E8”) 中的字符串张量转换为浮点类型。例如,将字符串“100.5”转换为整数可能会产生结果 100。某些字符串文字保留用于特殊浮点值;“+INF” (和“INF”)、“-INF”和“NaN”分别表示正无穷大、负无穷大和非数值。任何可以与“+INF”进行不区分大小写匹配的字符串都会映射为正无穷大。同样,此不区分大小写规则应用于“INF”和“NaN”。将数字张量转换为字符串张量时,将使用普通浮点表示 (例如,“314.15926”)。转换非数字文字字符串 (例如,“Hello World!”) 是未定义的行为。将表示浮点运算值的字符串 (例如,“2.718”) 转换为 INT 的情况是未定义的行为。

始终允许从数字类型到任何数字类型的转换。用户必须注意由两种类型之间的范围差异引起的精度损失和值变化。例如,64 位浮点数 3.1415926459 可能会舍入为 32 位浮点数 3.141592。同样,将整数 36 转换为布尔值可能会产生 1,因为我们截断了无法存储在目标类型中的位。

更详细地说,如果目标类型不是 float 8 类型,则数字类型之间的转换应遵循以下规则。

  • 从浮点类型转换为

    • 浮点类型:超出范围 (OOR) 时为 +/- 无穷大。

    • 定点类型:超出范围 (OOR) 时未定义。

    • 布尔类型:+/- 0.0 为 False;其他所有情况为 True。

  • 从定点类型转换为

    • 浮点类型:超出范围 (OOR) 时为 +/- 无穷大。(uint 情况下为 + 无穷大)

    • 定点类型:超出范围 (OOR) 时,丢弃高位并重新解释 (对于有符号类型,相对于二进制补码表示)。例如,200 (int16) -> -56 (int8)。

    • 布尔类型:零为 False;非零为 True。

  • 从布尔类型转换为

    • 浮点类型:{1.0, 0.0}

    • 定点类型:{1, 0}

    • 布尔类型:无变化。

Float 8 类型是为了加速深度模型的训练而引入的。默认情况下,浮点数 *x* 的转换遵循以下规则。[x] 表示四舍五入到目标尾数宽度的值。

x

E4M3FN

E4M3FNUZ

E5M2

E5M2FNUZ

0

0

0

0

0

-0

-0

0

-0

0

NaN

NaN

NaN

NaN

NaN

+/- 无穷大

+/- FLT_MAX

NaN

FLT_MAX

NaN

[x] > FLT_MAX

FLT_MAX

FLT_MAX

FLT_MAX

FLT_MAX

[x] < -FLT_MAX

-FLT_MAX

-FLT_MAX

-FLT_MAX

-FLT_MAX

其他情况

RNE

RNE

RNE

RNE

如果参数“saturate”设置为 False,则行为会发生改变。然后规则变为

x

E4M3FN

E4M3FNUZ

E5M2

E5M2FNUZ

0

0

0

0

0

-0

-0

0

-0

0

NaN

NaN

NaN

NaN

NaN

+/- 无穷大

NaN

NaN

+/- 无穷大

NaN

[x] > FLT_MAX

NaN

NaN

无穷大

NaN

[x] < -FLT_MAX

NaN

NaN

-无穷大

NaN

其他情况

RNE

RNE

RNE

RNE

属性

  • saturate - INT (默认值为 '1')

    该参数定义了当输入值超出目标类型范围时转换的行为。它仅适用于 float 8 转换 (float8e4m3fn、float8e4m3fnuz、float8e5m2、float8e5m2fnuz)。默认情况下为真。算子说明中插入的两个表中详细描述了所有情况。

  • to - INT (必需)

    输入张量元素转换到的数据类型。严格来说必须是 TensorProto 中 DataType 枚举中的类型之一

输入

  • input (异构) - T1

    要转换的输入张量。

输出

  • output (异构) - T2

    与输入具有相同形状的输出张量,类型由“to”参数指定

类型约束

  • T1 in ( tensor(bfloat16), tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(float4e2m1), tensor(float8e4m3fn), tensor(float8e4m3fnuz), tensor(float8e5m2), tensor(float8e5m2fnuz), tensor(int16), tensor(int32), tensor(int4), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint32), tensor(uint4), tensor(uint64), tensor(uint8) )

    约束输入类型。不支持从复数进行转换。

  • T2 in ( tensor(bfloat16), tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(float4e2m1), tensor(float8e4m3fn), tensor(float8e4m3fnuz), tensor(float8e5m2), tensor(float8e5m2fnuz), tensor(int16), tensor(int32), tensor(int4), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint32), tensor(uint4), tensor(uint64), tensor(uint8) )

    约束输出类型。不支持转换为复数。

转换 - 21

版本

  • 名称: 转换 (GitHub)

  • : main

  • 自版本: 21

  • 函数: False

  • 支持级别: SupportType.COMMON

  • 形状推断: True

此版本的算子自版本 21起可用。

摘要

该算子将给定输入张量中的元素转换为“to”参数指定的类型,并返回一个以转换类型表示的相同大小的输出张量。“to”参数必须是 TensorProto 消息的“DataType”枚举字段中指定的类型之一。

支持将普通 (例如,“3.14”和“1000”) 和科学数值表示 (例如,“1e-5”和“1E8”) 中的字符串张量转换为浮点类型。例如,将字符串“100.5”转换为整数可能会产生结果 100。某些字符串文字保留用于特殊浮点值;“+INF” (和“INF”)、“-INF”和“NaN”分别表示正无穷大、负无穷大和非数值。任何可以与“+INF”进行不区分大小写匹配的字符串都会映射为正无穷大。同样,此不区分大小写规则应用于“INF”和“NaN”。将数字张量转换为字符串张量时,将使用普通浮点表示 (例如,“314.15926”)。转换非数字文字字符串 (例如,“Hello World!”) 是未定义的行为。将表示浮点运算值的字符串 (例如,“2.718”) 转换为 INT 的情况是未定义的行为。

始终允许从数字类型到任何数字类型的转换。用户必须注意由两种类型之间的范围差异引起的精度损失和值变化。例如,64 位浮点数 3.1415926459 可能会舍入为 32 位浮点数 3.141592。同样,将整数 36 转换为布尔值可能会产生 1,因为我们截断了无法存储在目标类型中的位。

更详细地说,如果目标类型不是 float 8 类型,则数字类型之间的转换应遵循以下规则。

  • 从浮点类型转换为

    • 浮点类型:超出范围 (OOR) 时为 +/- 无穷大。

    • 定点类型:超出范围 (OOR) 时未定义。

    • 布尔类型:+/- 0.0 为 False;其他所有情况为 True。

  • 从定点类型转换为

    • 浮点类型:超出范围 (OOR) 时为 +/- 无穷大。(uint 情况下为 + 无穷大)

    • 定点类型:超出范围 (OOR) 时,丢弃高位并重新解释 (对于有符号类型,相对于二进制补码表示)。例如,200 (int16) -> -56 (int8)。

    • 布尔类型:零为 False;非零为 True。

  • 从布尔类型转换为

    • 浮点类型:{1.0, 0.0}

    • 定点类型:{1, 0}

    • 布尔类型:无变化。

Float 8 类型是为了加速深度模型的训练而引入的。默认情况下,浮点数 *x* 的转换遵循以下规则。[x] 表示四舍五入到目标尾数宽度的值。

x

E4M3FN

E4M3FNUZ

E5M2

E5M2FNUZ

0

0

0

0

0

-0

-0

0

-0

0

NaN

NaN

NaN

NaN

NaN

+/- 无穷大

+/- FLT_MAX

NaN

FLT_MAX

NaN

[x] > FLT_MAX

FLT_MAX

FLT_MAX

FLT_MAX

FLT_MAX

[x] < -FLT_MAX

-FLT_MAX

-FLT_MAX

-FLT_MAX

-FLT_MAX

其他情况

RNE

RNE

RNE

RNE

如果参数“saturate”设置为 False,则行为会发生改变。然后规则变为

x

E4M3FN

E4M3FNUZ

E5M2

E5M2FNUZ

0

0

0

0

0

-0

-0

0

-0

0

NaN

NaN

NaN

NaN

NaN

+/- 无穷大

NaN

NaN

+/- 无穷大

NaN

[x] > FLT_MAX

NaN

NaN

无穷大

NaN

[x] < -FLT_MAX

NaN

NaN

-无穷大

NaN

其他情况

RNE

RNE

RNE

RNE

属性

  • saturate - INT (默认值为 '1')

    该参数定义了当输入值超出目标类型范围时转换的行为。它仅适用于 float 8 转换 (float8e4m3fn、float8e4m3fnuz、float8e5m2、float8e5m2fnuz)。默认情况下为真。算子说明中插入的两个表中详细描述了所有情况。

  • to - INT (必需)

    输入张量元素转换到的数据类型。严格来说必须是 TensorProto 中 DataType 枚举中的类型之一

输入

  • input (异构) - T1

    要转换的输入张量。

输出

  • output (异构) - T2

    与输入具有相同形状的输出张量,类型由“to”参数指定

类型约束

  • T1 in ( tensor(bfloat16), tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(float8e4m3fn), tensor(float8e4m3fnuz), tensor(float8e5m2), tensor(float8e5m2fnuz), tensor(int16), tensor(int32), tensor(int4), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint32), tensor(uint4), tensor(uint64), tensor(uint8) )

    约束输入类型。不支持从复数进行转换。

  • T2 in ( tensor(bfloat16), tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(float8e4m3fn), tensor(float8e4m3fnuz), tensor(float8e5m2), tensor(float8e5m2fnuz), tensor(int16), tensor(int32), tensor(int4), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint32), tensor(uint4), tensor(uint64), tensor(uint8) )

    约束输出类型。不支持转换为复数。

Cast - 19

版本

  • 名称: 转换 (GitHub)

  • : main

  • since_version: 19

  • 函数: False

  • 支持级别: SupportType.COMMON

  • 形状推断: True

该版本的操作符自 版本 19 开始可用。

概述

该算子将给定输入张量中的元素转换为“to”参数指定的类型,并返回一个以转换类型表示的相同大小的输出张量。“to”参数必须是 TensorProto 消息的“DataType”枚举字段中指定的类型之一。

支持将普通 (例如,“3.14”和“1000”) 和科学数值表示 (例如,“1e-5”和“1E8”) 中的字符串张量转换为浮点类型。例如,将字符串“100.5”转换为整数可能会产生结果 100。某些字符串文字保留用于特殊浮点值;“+INF” (和“INF”)、“-INF”和“NaN”分别表示正无穷大、负无穷大和非数值。任何可以与“+INF”进行不区分大小写匹配的字符串都会映射为正无穷大。同样,此不区分大小写规则应用于“INF”和“NaN”。将数字张量转换为字符串张量时,将使用普通浮点表示 (例如,“314.15926”)。转换非数字文字字符串 (例如,“Hello World!”) 是未定义的行为。将表示浮点运算值的字符串 (例如,“2.718”) 转换为 INT 的情况是未定义的行为。

始终允许从数字类型到任何数字类型的转换。用户必须注意由两种类型之间的范围差异引起的精度损失和值变化。例如,64 位浮点数 3.1415926459 可能会舍入为 32 位浮点数 3.141592。同样,将整数 36 转换为布尔值可能会产生 1,因为我们截断了无法存储在目标类型中的位。

更详细地说,如果目标类型不是 float 8 类型,则数字类型之间的转换应遵循以下规则。

  • 从浮点类型转换为

    • 浮点类型:超出范围 (OOR) 时为 +/- 无穷大。

    • 定点类型:超出范围 (OOR) 时未定义。

    • 布尔类型:+/- 0.0 为 False;其他所有情况为 True。

  • 从定点类型转换为

    • 浮点类型:超出范围 (OOR) 时为 +/- 无穷大。(uint 情况下为 + 无穷大)

    • 定点类型:超出范围 (OOR) 时,丢弃高位并重新解释 (对于有符号类型,相对于二进制补码表示)。例如,200 (int16) -> -56 (int8)。

    • 布尔类型:零为 False;非零为 True。

  • 从布尔类型转换为

    • 浮点类型:{1.0, 0.0}

    • 定点类型:{1, 0}

    • 布尔类型:无变化。

Float 8 类型是为了加速深度模型的训练而引入的。默认情况下,浮点数 *x* 的转换遵循以下规则。[x] 表示四舍五入到目标尾数宽度的值。

x

E4M3FN

E4M3FNUZ

E5M2

E5M2FNUZ

0

0

0

0

0

-0

-0

0

-0

0

NaN

NaN

NaN

NaN

NaN

+/- 无穷大

+/- FLT_MAX

NaN

FLT_MAX

NaN

[x] > FLT_MAX

FLT_MAX

FLT_MAX

FLT_MAX

FLT_MAX

[x] < -FLT_MAX

-FLT_MAX

-FLT_MAX

-FLT_MAX

-FLT_MAX

其他情况

RNE

RNE

RNE

RNE

如果参数“saturate”设置为 False,则行为会发生改变。然后规则变为

x

E4M3FN

E4M3FNUZ

E5M2

E5M2FNUZ

0

0

0

0

0

-0

-0

0

-0

0

NaN

NaN

NaN

NaN

NaN

+/- 无穷大

NaN

NaN

+/- 无穷大

NaN

[x] > FLT_MAX

NaN

NaN

无穷大

NaN

[x] < -FLT_MAX

NaN

NaN

-无穷大

NaN

其他情况

RNE

RNE

RNE

RNE

属性

  • saturate - INT (默认值为 '1')

    该参数定义了当输入值超出目标类型范围时转换的行为。它仅适用于 float 8 转换 (float8e4m3fn、float8e4m3fnuz、float8e5m2、float8e5m2fnuz)。默认情况下为真。算子说明中插入的两个表中详细描述了所有情况。

  • to - INT (必需)

    输入张量元素转换到的数据类型。严格来说必须是 TensorProto 中 DataType 枚举中的类型之一

输入

  • input (异构) - T1

    要转换的输入张量。

输出

  • output (异构) - T2

    与输入具有相同形状的输出张量,类型由“to”参数指定

类型约束

  • T1 in ( tensor(bfloat16), tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(float8e4m3fn), tensor(float8e4m3fnuz), tensor(float8e5m2), tensor(float8e5m2fnuz), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8) )

    约束输入类型。不支持从复数进行转换。

  • T2 in ( tensor(bfloat16), tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(float8e4m3fn), tensor(float8e4m3fnuz), tensor(float8e5m2), tensor(float8e5m2fnuz), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8) )

    约束输出类型。不支持转换为复数。

Cast - 13

版本

  • 名称: 转换 (GitHub)

  • : main

  • since_version: 13

  • 函数: False

  • 支持级别: SupportType.COMMON

  • 形状推断: True

该版本的操作符自 版本 13 开始可用。

概述

该算子将给定输入张量中的元素转换为“to”参数指定的类型,并返回一个以转换类型表示的相同大小的输出张量。“to”参数必须是 TensorProto 消息的“DataType”枚举字段中指定的类型之一。

支持将普通 (例如,“3.14”和“1000”) 和科学数值表示 (例如,“1e-5”和“1E8”) 中的字符串张量转换为浮点类型。例如,将字符串“100.5”转换为整数可能会产生结果 100。某些字符串文字保留用于特殊浮点值;“+INF” (和“INF”)、“-INF”和“NaN”分别表示正无穷大、负无穷大和非数值。任何可以与“+INF”进行不区分大小写匹配的字符串都会映射为正无穷大。同样,此不区分大小写规则应用于“INF”和“NaN”。将数字张量转换为字符串张量时,将使用普通浮点表示 (例如,“314.15926”)。转换非数字文字字符串 (例如,“Hello World!”) 是未定义的行为。将表示浮点运算值的字符串 (例如,“2.718”) 转换为 INT 的情况是未定义的行为。

始终允许从数字类型到任何数字类型的转换。用户必须注意由两种类型之间的范围差异引起的精度损失和值变化。例如,64 位浮点数 3.1415926459 可能会舍入为 32 位浮点数 3.141592。同样,将整数 36 转换为布尔值可能会产生 1,因为我们截断了无法存储在目标类型中的位。

更详细地说,数值类型之间的转换应遵循以下规则

  • 从浮点类型转换为

    • 浮点类型:超出范围 (OOR) 时为 +/- 无穷大。

    • 定点类型:超出范围 (OOR) 时未定义。

    • 布尔类型:+/- 0.0 为 False;其他所有情况为 True。

  • 从定点类型转换为

    • 浮点类型:超出范围 (OOR) 时为 +/- 无穷大。(uint 情况下为 + 无穷大)

    • 定点类型:超出范围 (OOR) 时,丢弃高位并重新解释 (对于有符号类型,相对于二进制补码表示)。例如,200 (int16) -> -56 (int8)。

    • 布尔类型:零为 False;非零为 True。

  • 从布尔类型转换为

    • 浮点类型:{1.0, 0.0}

    • 定点类型:{1, 0}

    • 布尔类型:无变化。

属性

  • to - INT (必需)

    输入张量元素转换到的数据类型。严格来说必须是 TensorProto 中 DataType 枚举中的类型之一

输入

  • input (异构) - T1

    要转换的输入张量。

输出

  • output (异构) - T2

    与输入具有相同形状的输出张量,类型由“to”参数指定

类型约束

  • T1 in ( tensor(bfloat16), tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8) )

    约束输入类型。不支持从复数进行转换。

  • T2 in ( tensor(bfloat16), tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8) )

    约束输出类型。不支持转换为复数。

Cast - 9

版本

  • 名称: 转换 (GitHub)

  • : main

  • since_version: 9

  • 函数: False

  • 支持级别: SupportType.COMMON

  • 形状推断: True

该版本的操作符自 版本 9 开始可用。

概述

该算子将给定输入张量中的元素转换为“to”参数指定的类型,并返回一个以转换类型表示的相同大小的输出张量。“to”参数必须是 TensorProto 消息的“DataType”枚举字段中指定的类型之一。

支持将普通 (例如,“3.14”和“1000”) 和科学数值表示 (例如,“1e-5”和“1E8”) 中的字符串张量转换为浮点类型。例如,将字符串“100.5”转换为整数可能会产生结果 100。某些字符串文字保留用于特殊浮点值;“+INF” (和“INF”)、“-INF”和“NaN”分别表示正无穷大、负无穷大和非数值。任何可以与“+INF”进行不区分大小写匹配的字符串都会映射为正无穷大。同样,此不区分大小写规则应用于“INF”和“NaN”。将数字张量转换为字符串张量时,将使用普通浮点表示 (例如,“314.15926”)。转换非数字文字字符串 (例如,“Hello World!”) 是未定义的行为。将表示浮点运算值的字符串 (例如,“2.718”) 转换为 INT 的情况是未定义的行为。

始终允许从数字类型到任何数字类型的转换。用户必须注意由两种类型之间的范围差异引起的精度损失和值变化。例如,64 位浮点数 3.1415926459 可能会舍入为 32 位浮点数 3.141592。同样,将整数 36 转换为布尔值可能会产生 1,因为我们截断了无法存储在目标类型中的位。

属性

  • to - INT (必需)

    输入张量元素转换到的数据类型。严格来说必须是 TensorProto 中 DataType 枚举中的类型之一

输入

  • input (异构) - T1

    要转换的输入张量。

输出

  • output (异构) - T2

    与输入具有相同形状的输出张量,类型由“to”参数指定

类型约束

  • T1 in ( tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8) )

    约束输入类型。不支持从复数进行转换。

  • T2 in ( tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8) )

    约束输出类型。不支持转换为复数。

Cast - 6

版本

  • 名称: 转换 (GitHub)

  • : main

  • since_version: 6

  • 函数: False

  • 支持级别: SupportType.COMMON

  • 形状推断: True

该版本的操作符自 版本 6 开始可用。

概述

该操作符将给定输入张量中的元素转换为由“to”参数指定的 数据类型,并返回相同大小的输出张量,其类型已转换。 “to”参数必须是 TensorProto 消息的“DataType”枚举字段中 指定的数据类型之一。 注意:目前不支持字符串类型之间的转换。

属性

  • to - INT (必需)

    输入张量元素转换到的数据类型。严格来说必须是 TensorProto 中 DataType 枚举中的类型之一

输入

  • input (异构) - T1

    要转换的输入张量。

输出

  • output (异构) - T2

    与输入具有相同形状的输出张量,类型由“to”参数指定

类型约束

  • T1 在 ( tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8) )

    约束输入类型。不支持从字符串和复数进行类型转换。

  • T2 在 ( tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8) )

    约束输出类型。不支持转换为字符串和复数。

强制转换 - 1

版本

  • 名称: 转换 (GitHub)

  • : main

  • since_version: 1

  • 函数: False

  • 支持级别: SupportType.COMMON

  • shape inference: False

此版本的运算符从版本 1 开始可用

摘要

该操作符将给定输入张量中的元素转换为由“to”参数指定的 数据类型,并返回相同大小的输出张量,其类型已转换。 “to”参数必须是 TensorProto 消息的“DataType”枚举字段中 指定的数据类型之一。 注意:目前不支持字符串类型之间的转换。

属性

  • to - STRING (必填)

    输入张量元素转换到的数据类型。严格来说必须是 TensorProto 中 DataType 枚举中的类型之一

输入

  • input (异构) - T1

    要转换的输入张量。

输出

  • output (异构) - T2

    与输入具有相同形状的输出张量,类型由“to”参数指定

类型约束

  • T1 在 ( tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8) )

    约束输入类型。不支持从字符串和复数进行类型转换。

  • T2 在 ( tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8) )

    约束输出类型。不支持转换为字符串和复数。