转换

Cast - 23

版本

  • 名称: Cast (GitHub)

  • 域名: main

  • since_version: 23

  • 函数: False

  • support_level: 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,因为我们截断了无法存储在目标类型中的位。

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

  • 从浮点数转换为:

    • 浮点数:如果超出范围(OOR),则为 +/- 无穷大。

    • 固定点:如果超出范围则未定义。

    • bool: +/- 0.0 转换为 False; 其他所有值转换为 True。

  • 从定点数转换为:

    • 浮点数:如果超出范围则为 +/- 无穷大。(在 uint 的情况下为 + 无穷大)

    • 固定点:当超出范围时,丢弃高位并重新解释(对于有符号类型,使用二进制补码表示)。例如,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)。默认情况下为true。所有情况都在操作符描述中插入的两个表格中进行了详细描述。

  • to - INT (必填) :

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

输入

  • 输入 (异构) - T1:

    要转换的输入张量。

输出

  • 输出 (异构) - 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

  • since_version: 21

  • 函数: False

  • support_level: 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,因为我们截断了无法存储在目标类型中的位。

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

  • 从浮点数转换为:

    • 浮点数:如果超出范围(OOR),则为 +/- 无穷大。

    • 固定点:如果超出范围则未定义。

    • bool: +/- 0.0 转换为 False; 其他所有值转换为 True。

  • 从定点数转换为:

    • 浮点数:如果超出范围则为 +/- 无穷大。(在 uint 的情况下为 + 无穷大)

    • 固定点:当超出范围时,丢弃高位并重新解释(对于有符号类型,使用二进制补码表示)。例如,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)。默认情况下为true。所有情况都在操作符描述中插入的两个表格中进行了详细描述。

  • to - INT (必填) :

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

输入

  • 输入 (异构) - T1:

    要转换的输入张量。

输出

  • 输出 (异构) - 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

  • since_version: 19

  • 函数: False

  • support_level: 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,因为我们截断了无法存储在目标类型中的位。

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

  • 从浮点数转换为:

    • 浮点数:如果超出范围(OOR),则为 +/- 无穷大。

    • 固定点:如果超出范围则未定义。

    • bool: +/- 0.0 转换为 False; 其他所有值转换为 True。

  • 从定点数转换为:

    • 浮点数:如果超出范围则为 +/- 无穷大。(在 uint 的情况下为 + 无穷大)

    • 固定点:当超出范围时,丢弃高位并重新解释(对于有符号类型,使用二进制补码表示)。例如,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)。默认情况下为true。所有情况都在操作符描述中插入的两个表格中进行了详细描述。

  • to - INT (必填) :

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

输入

  • 输入 (异构) - T1:

    要转换的输入张量。

输出

  • 输出 (异构) - 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

  • since_version: 13

  • 函数: False

  • support_level: 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),则为 +/- 无穷大。

    • 固定点:如果超出范围则未定义。

    • bool: +/- 0.0 转换为 False; 其他所有值转换为 True。

  • 从定点数转换为:

    • 浮点数:如果超出范围则为 +/- 无穷大。(在 uint 的情况下为 + 无穷大)

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

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

  • 从布尔类型转换为:

    • 浮点数: {1.0, 0.0}.

    • 固定点: {1, 0}.

    • 布尔值:无变化。

属性

  • to - INT (必填) :

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

输入

  • 输入 (异构) - T1:

    要转换的输入张量。

输出

  • 输出 (异构) - 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

  • since_version: 9

  • 函数: False

  • support_level: 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枚举的类型之一。

输入

  • 输入 (异构) - T1:

    要转换的输入张量。

输出

  • 输出 (异构) - 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

  • since_version: 6

  • 函数: False

  • support_level: SupportType.COMMON

  • 形状推断: True

此版本的运算符自版本6起可用。

摘要

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

属性

  • to - INT (必填) :

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

输入

  • 输入 (异构) - T1:

    要转换的输入张量。

输出

  • 输出 (异构) - 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

版本

  • 名称: Cast (GitHub)

  • 域名: main

  • since_version: 1

  • 函数: False

  • support_level: SupportType.COMMON

  • 形状推断: False

此版本的运算符自版本1起可用。

总结

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

属性

  • to - STRING(必填):

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

输入

  • 输入 (异构) - T1:

    要转换的输入张量。

输出

  • 输出 (异构) - 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) ):

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