nvidia.dali.fn.normalize#

nvidia.dali.fn.normalize(__input, /, *, axes=[], axis_names='', batch=False, bytes_per_sample_hint=[0], ddof=0, dtype=DALIDataType.FLOAT, epsilon=0.0, mean=None, preserve=False, scale=1.0, shift=0.0, stddev=None, device=None, name=None)#

通过移除均值并除以标准差来归一化输入。

均值和标准差可以在内部为指定的轴子集计算,也可以作为 meanstddev 参数从外部提供。

归一化按照以下公式进行

out = scale * (in - mean) / stddev + shift

该公式假设 outin 是形状相等的张量,但 meanstddev 可能是相同形状的张量、标量或两者的混合。

注意

该表达式遵循 numpy 广播规则。

如果给定轴被缩减,则非标量 meanstddev 的大小必须为 1,或者与输入的相应范围匹配。如果轴在 axesaxis_names 中列出,则认为该维度被缩减。如果 axesaxis_names 参数都不存在,则通过比较输入形状与均值/标准差参数的形状来推断缩减轴的集合,但对于批次中的所有张量,缩减轴的集合必须相同。

以下是一些有效参数组合的示例

  1. 维度 0 和 2 的每样本归一化

    axes = 0,2                                        # optional
    input.shape = [ [480, 640, 3], [1080, 1920, 4] ]
    batch = False
    mean.shape =  [ [1, 640, 1], [1, 1920, 1] ]
    stddev = (not supplied)
    

使用这些形状,批次归一化是不可能的,因为非缩减维度在不同样本之间具有不同的范围。

  1. 维度 0 和 1 的批次归一化

    axes = 0,1                                        # optional
    input.shape = [ [480, 640, 3], [1080, 1920, 3] ]
    batch = True
    mean = (scalar)
    stddev.shape =  [ [1, 1, 3] ] ]
    

对于彩色图像,此示例分别归一化 3 个颜色通道,但在批次中的所有样本中进行归一化。

此算子允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

参数:

__input (TensorList) – 算子的输入。

关键字参数:
  • axes (int 或 list of int, optional, default = []) –

    输入沿其归一化的维度索引。

    默认情况下,使用所有轴,也可以按名称指定轴。有关更多信息,请参阅 axis_names

  • axis_names (layout str, optional, default = ‘’) –

    输入中轴的名称。

    轴索引取自输入布局,此参数不能与 axes 一起使用。

  • batch (bool, optional, default = False) –

    如果设置为 True,则跨批次中的张量计算均值和标准差。

    此参数还要求非缩减轴中的输入样本形状匹配。

  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

    每个样本的输出大小提示(以字节为单位)。

    如果指定,则将预先分配驻留在 GPU 或页面锁定主机内存中的算子输出,以容纳此大小的样本批次。

  • ddof (int, optional, default = 0) –

    Bessel 校正的 Delta 自由度。

    方差估计使用以下公式

    sum(Xi - mean)**2 / (N - ddof).
    

    当使用外部提供的标准差时,将忽略此参数。

  • dtype (nvidia.dali.types.DALIDataType, optional, default = DALIDataType.FLOAT) –

    输出数据类型。

    当使用整数类型时,请使用 shiftscale 以提高输出类型动态范围的利用率。如果 dtype 是整数类型,则超出范围的值将被钳制,非整数值将四舍五入到最接近的整数。

  • epsilon (float, optional, default = 0.0) – 添加到方差以避免除以小数值的值。

  • mean (floatTensorList of float, optional) –

    要从数据中减去的均值。

    该值可以是标量或与输入具有相同维度的张量批次。每个维度中的范围必须与输入的值匹配或等于 1。如果范围为 1,则该值将在此维度中广播。如果未指定值,则从输入计算均值。当 batch 参数设置为 True 时,不能使用非标量均值。

  • preserve (bool, optional, default = False) – 即使算子的输出未使用,也阻止从图中删除该算子。

  • scale (float, optional, default = 1.0) –

    应用于输出的缩放因子。

    此参数对于整数输出类型很有用。

  • shift (float, optional, default = 0.0) –

    均值将在输出中映射到的值。

    此参数对于无符号输出类型很有用。

  • stddev (floatTensorList of float, optional) –

    用于缩放数据的标准差值。

    有关形状约束的更多信息,请参阅 mean 参数。如果未指定值,则从输入计算标准差。当 batch 参数设置为 True 时,不能使用非标量 stddev