归一化#

批归一化前向#

批归一化操作计算

\( output = scale*{input - mean \over \sqrt{variance + epsilon}} + bias \)

可选地,该操作还计算

\(next\_running\_mean = (1 - momentum)*previous\_running\_mean + momentum*current\_running\_mean\)

\(next\_running\_variance = (1 - momentum)*previous\_running\_variance + momentum*current\_running\_variance\)

C++ API#

std::array<std::shared_ptr<Tensor_attributes>, 5> batchnorm(std::shared_ptr<Tensor_attributes>& input,
                                                            std::shared_ptr<Tensor_attributes>& scale,
                                                            std::shared_ptr<Tensor_attributes>& bias,
                                                            Batchnorm_attributes attributes); 

其中输出数组包含以下顺序的张量: [output, saved_mean, saved_invariance, next_running_mean, next_running_variance]

批归一化属性是一个轻量级结构,带有用于提供可选输入张量和其他操作属性的设置器

Batchnorm_attributes&
set_previous_running_stats(std::shared_ptr<Tensor_attributes>& previous_running_mean,
                            std::shared_ptr<Tensor_attributes>& previous_running_variance,
                            std::shared_ptr<Tensor_attributes>& momentum)

Batchnorm_attributes&
set_name(std::string const&)

Batchnorm_attributes&
set_compute_data_type(DataType_t value)

Python API#

  • 批归一化

    • 输入

    • 缩放

    • 偏置

    • 输入运行均值

    • 输入运行方差

    • epsilon

    • momentum

    • 计算数据类型

    • 名称

批归一化完成#

The bn_finalize 操作根据 genstat 操作生成的统计信息计算下一次迭代所需的统计信息。

C++ API#

    std::array<std::shared_ptr<Tensor_attributes>, 6> bn_finalize(std::shared_ptr<Tensor_attributes>,
                                                                  std::shared_ptr<Tensor_attributes>,
                                                                  std::shared_ptr<Tensor_attributes>,
                                                                  std::shared_ptr<Tensor_attributes>,
                                                                  std::shared_ptr<Tensor_attributes>,
                                                                  std::shared_ptr<Tensor_attributes>,
                                                                  BN_finalize_attributes);

输出为 [EQ_SCALE, EQ_BIAS, MEAN, INV_VARIANCE, NEXT_RUNNING_MEAN, NEXT_RUNNING_VAR]

批归一化反向 (DBN)#

DBN 操作计算批归一化前向操作反向传播期间的数据梯度、缩放梯度和偏置梯度。

C++ API#

std::array<std::shared_ptr<Tensor_attributes>, 3> batchnorm_backward(std::shared_ptr<Tensor_attributes> loss,
                                                                         std::shared_ptr<Tensor_attributes> input,
                                                                         std::shared_ptr<Tensor_attributes> scale,
                                                                         Batchnorm_backward_attributes);

输出数组包含以下顺序的张量: [input gradient, scale gradient, bias gradient]

DBN 属性是一个轻量级结构,带有设置器

Batchnorm_backward_attributes&
set_saved_mean_and_inv_variance(std::shared_ptr<Tensor_attributes> saved_mean,
                                std::shared_ptr<Tensor_attributes> saved_inverse_variance)
                                
Batchnorm_backward_attributes&
set_epsilon(std::shared_ptr<Tensor_attributes> epsilon)

Batchnorm_backward_attributes&
set_name(std::string const&)

Batchnorm_backward_attributes&
set_compute_data_type(DataType_t value)

只需设置(保存的均值和逆方差)或 (epsilon) 之一即可。

生成统计信息#

Genstats 操作计算每个通道维度的总和和平方和。

C++ API#

std::array<std::shared_ptr<Tensor_attributes>, 2>
cudnn_frontend::graph::genstats(std::shared_ptr<Tensor_attributes>, Genstats_attributes);

输出数组包含以下顺序的张量: [sum, square_sum]

Genstats 属性是一个轻量级结构,带有设置器

Genstats_attributes&
set_name(std::string const&)

Genstats_attributes&
set_compute_data_type(DataType_t value)

Python API#

  • 生成统计信息

    • 输入

    • 计算数据类型

    • 名称

层归一化前向#

层归一化操作计算

\( output = scale*{input - mean \over \sqrt{variance + epsilon}} + bias \)

归一化跨特征发生,每个样本独立进行。

C++ API#

std::array<std::shared_ptr<Tensor_attributes>, 3> layernorm(std::shared_ptr<Tensor_attributes>& input,
                                                            std::shared_ptr<Tensor_attributes>& scale,
                                                            std::shared_ptr<Tensor_attributes>& bias,
                                                            Layernorm_attributes attributes); 

输出数组包含以下顺序的张量: [output, mean, variance]

层归一化属性是一个轻量级结构,带有用于提供可选输入张量和其他操作属性的设置器

Layernorm_attributes&
set_name(std::string const&)

Layernorm_attributes&
set_compute_data_type(DataType_t value)

Python API#

  • 层归一化

    • 归一化前向阶段

    • 输入

    • 缩放

    • 偏置

    • epsilon

    • 计算数据类型

    • 名称

层归一化反向 (DLN)#

DLN 操作计算层归一化前向操作反向传播期间的数据梯度、缩放梯度和偏置梯度。

C++ API#

std::array<std::shared_ptr<Tensor_attributes>, 3>
            layernorm_backward(std::shared_ptr<Tensor_attributes> dy,
                          std::shared_ptr<Tensor_attributes> x,
                          std::shared_ptr<Tensor_attributes> scale,
                          Layernorm_backward_attributes options);

输出数组包含以下顺序的张量: [input gradient, scale gradient, bias gradient]

层归一化属性是一个轻量级结构,带有用于提供可选输入张量和其他操作属性的设置器

Layernorm_attributes&
set_name(std::string const&)

Layernorm_attributes&
set_compute_data_type(DataType_t value)

Python API#

  • 层归一化

    • 输入

    • 缩放

    • 损失

    • 计算数据类型

    • 名称

实例归一化前向#

实例归一化操作计算

\( output = scale*{input - mean \over \sqrt{variance + epsilon}} + bias \)

归一化跨每个样本发生。

C++ API#

std::array<std::shared_ptr<Tensor_attributes>, 3> instancenorm(std::shared_ptr<Tensor_attributes>& input,
                                                            std::shared_ptr<Tensor_attributes>& scale,
                                                            std::shared_ptr<Tensor_attributes>& bias,
                                                            Instancenorm_attributes attributes); 

输出数组包含以下顺序的张量: [output, mean, variance]

实例归一化属性是一个轻量级结构,带有用于提供可选输入张量和其他操作属性的设置器

Instancenorm_attributes&
set_name(std::string const&)

Instancenorm_attributes&
set_compute_data_type(DataType_t value)

Python API#

  • 实例归一化

    • 归一化前向阶段

    • 输入

    • 缩放

    • 偏置

    • epsilon

    • 计算数据类型

    • 名称

实例归一化反向 (DIN)#

DIN 操作计算实例归一化前向操作反向传播期间的数据梯度、缩放梯度和偏置梯度。

C++ API#

std::array<std::shared_ptr<Tensor_attributes>, 3>
            instancenorm_backward(std::shared_ptr<Tensor_attributes> dy,
                          std::shared_ptr<Tensor_attributes> x,
                          std::shared_ptr<Tensor_attributes> scale,
                          Instancenorm_backward_attributes options);

输出数组包含以下顺序的张量: [input gradient, scale gradient, bias gradient]

实例归一化属性是一个轻量级结构,带有用于提供可选输入张量和其他操作属性的设置器

Instancenorm_attributes&
set_name(std::string const&)

Instancenorm_attributes&
set_compute_data_type(DataType_t value)

Python API#

  • 层归一化

    • 输入

    • 缩放

    • 损失

    • 计算数据类型

    • 名称