Cast

Cast - 23

版本

  • 名称: Cast (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),则为 +/- 无穷大。(无符号整数情况下为 + 无穷大)

    • 定点数:当超出范围 (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

+/- Inf

+/- 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

+/- Inf

NaN

NaN

+/- Inf

NaN

[x] > FLT_MAX

NaN

NaN

Inf

NaN

[x] < -FLT_MAX

NaN

NaN

-Inf

NaN

其他

RNE

RNE

RNE

RNE

属性

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

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

  • to - INT (必需)

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

输入

  • input (异构) - T1

    要进行转换的输入张量。

输出

  • output (异构) - T2

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

类型约束

  • T1 属于 ( 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 属于 ( 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) )

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

Cast - 21

版本

  • 名称: Cast (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),则为 +/- 无穷大。(无符号整数情况下为 + 无穷大)

    • 定点数:当超出范围 (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

+/- Inf

+/- 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

+/- Inf

NaN

NaN

+/- Inf

NaN

[x] > FLT_MAX

NaN

NaN

Inf

NaN

[x] < -FLT_MAX

NaN

NaN

-Inf

NaN

其他

RNE

RNE

RNE

RNE

属性

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

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

  • to - INT (必需)

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

输入

  • input (异构) - T1

    要进行转换的输入张量。

输出

  • output (异构) - T2

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

类型约束

  • T1 属于 ( 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 属于 ( 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

版本

  • 名称: Cast (GitHub)

  • : main

  • 自版本: 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),则为 +/- 无穷大。(无符号整数情况下为 + 无穷大)

    • 定点数:当超出范围 (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

+/- Inf

+/- 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

+/- Inf

NaN

NaN

+/- Inf

NaN

[x] > FLT_MAX

NaN

NaN

Inf

NaN

[x] < -FLT_MAX

NaN

NaN

-Inf

NaN

其他

RNE

RNE

RNE

RNE

属性

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

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

  • to - INT (必需)

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

输入

  • input (异构) - T1

    要进行转换的输入张量。

输出

  • output (异构) - T2

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

类型约束

  • T1 属于 ( 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 属于 ( 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

版本

  • 名称: Cast (GitHub)

  • : main

  • 自版本: 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),则为 +/- 无穷大。(无符号整数情况下为 + 无穷大)

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

    • 布尔值:零为 False;非零为 True。

  • 从布尔值转换为

    • 浮点数:{1.0, 0.0}

    • 定点数:{1, 0}

    • 布尔值:无变化。

属性

  • to - INT (必需)

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

输入

  • input (异构) - T1

    要进行转换的输入张量。

输出

  • output (异构) - T2

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

类型约束

  • T1 属于 ( 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 属于 ( 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

版本

  • 名称: Cast (GitHub)

  • : main

  • 自版本: 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 属于 ( 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 属于 ( 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

版本

  • 名称: Cast (GitHub)

  • : main

  • 自版本: 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) )

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

Cast - 1

版本

  • 名称: Cast (GitHub)

  • : main

  • 起始版本: 1

  • 函数: False

  • 支持级别: SupportType.COMMON

  • 形状推断: 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) )

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