CANN/asc-devkit: Conv3DBackpropFilter使用说明

发布时间:2026/7/4 21:28:05
CANN/asc-devkit: Conv3DBackpropFilter使用说明 Conv3DBackpropFilter使用说明【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkitAscend C提供一组Conv3DBackpropFilter高阶API便于用户快速实现卷积的反向运算求解反向传播的误差。卷积反向的权重传播如图1卷积反向权重计算如图2。Conv3dBackpropFilter的计算公式为X为卷积的特征矩阵Input。∂L/∂Y为卷积正向损失函数对输出Y的梯度GradOutput作为求反向传播误差∂L/∂W的输入即卷积的输出反向GradOutput。∂L/∂W为Weight权重的反向传播误差GradWeight。图1卷积反向权重传播示意图![](https://raw.gitcode.com/cann/asc-devkit/raw/4d58be33f1da028b6d716e1e6e7b8d9755ae049c/docs/api/figures/卷积反向权重传播示意图.png 卷积反向权重传播示意图?utm_sourcegitcode_repo_files)图2卷积反向权重计算过程示意图![](https://raw.gitcode.com/cann/asc-devkit/raw/4d58be33f1da028b6d716e1e6e7b8d9755ae049c/docs/api/figures/卷积反向权重计算过程示意图.png 卷积反向权重计算过程示意图?utm_sourcegitcode_repo_files)Kernel侧实现Conv3DBackpropFilter求解反向传播误差运算的步骤概括为创建Conv3DBackpropFilter对象。初始化操作。设置卷积的特征矩阵Input、卷积的输出反向GradOutput。完成卷积反向操作。结束卷积反向操作。使用Conv3DBackpropFilter高阶API求解反向传播误差运算的具体步骤如下创建Conv3DBackpropFilter对象。#include lib/conv_backprop/conv3d_bp_filter_api.h using inputType ConvBackpropApi::ConvTypeConvCommonApi::TPosition::GM, ConvCommonApi::ConvFormat::NDC1HWC0, inputType; using weightSizeType ConvBackpropApi::ConvTypeConvCommonApi::TPosition::GM, ConvCommonApi::ConvFormat::ND, int32_t; using gradOutputType ConvBackpropApi::ConvTypeConvCommonApi::TPosition::GM, ConvCommonApi::ConvFormat::NDC1HWC0, gradOutputType; using gradWeightType ConvBackpropApi::ConvTypeConvCommonApi::TPosition::GM, ConvCommonApi::ConvFormat::FRACTAL_Z_3D, gradWeightType; ConvBackpropApi::Conv3DBackpropFilterinputType, weightSizeType, gradOutputType, gradWeightType gradWeight_;创建对象时需要传入特征矩阵Input、权重矩阵Weight的shape信息WeightSize、GradOutput和GradWeight的参数类型信息类型信息通过ConvType来定义包括内存逻辑位置、数据格式、数据类型。template TPosition POSITION, ConvFormat FORMAT, typename T struct ConvType { constexpr static TPosition pos POSITION; // Convolution输入或输出的逻辑位置 constexpr static ConvFormat format FORMAT; // Convolution输入或输出的数据格式 using Type T; // Convolution输入或输出的数据类型 };下面简要介绍在创建对象时使用到的相关数据结构开发者可选择性地了解这些内容。用于创建Conv3DBackpropFilter对象的数据结构定义如下using Conv3DBackpropFilter Conv3DBpFilterIntf Conv3DBpFilterCfgINPUT_TYPE, WEIGHT_TYPE, GRAD_OUTPUT_TYPE, GRAD_WEIGHT_TYPE, Conv3DBpFilterImpl;其中Conv3DBpFilterIntf、Conv3DBpFilterCfg数据结构定义如下template class Config_, template typename, class class Impl struct Conv3DBpFilterIntf {}template class A, class B, class C, class D struct Conv3DBpFilterCfg : public ConvBpContextA, B, C, D {}表1ConvType说明| 参数 | 说明 | | --- | --- | | POSITION | 内存逻辑位置。Input X矩阵可设置为TPosition::GM。WeightSize可设置为TPosition::GM。GradOutput矩阵可设置为TPosition::GM。GradWeight矩阵可设置为TPosition::GM。 | | ConvFormat | 数据格式。Input矩阵可设置为ConvFormat::NDC1HWC0。WeightSize矩阵可设置为ConvFormat::ND。GradOutput矩阵可设置为ConvFormat::NDC1HWC0。GradWeight矩阵可设置为ConvFormat::FRACTAL_Z_3D。 | | TYPE | 数据类型。Input矩阵可设置为half、bfloat16_t。WeightSize可设置为int32_t。GradOutput矩阵可设置为half、bfloat16_tGrad。Weight矩阵可设置为float。注意Input、GradOutput数据类型需要一致具体数据类型组合关系请参考表2。 |表2Conv3DBackpropFilter输入输出数据类型的组合说明InputWeightSizeGradOutputGradWeight支持平台halfint32_thalffloatAtlas A3 训练系列产品/Atlas A3 推理系列产品Atlas A2 训练系列产品/Atlas A2 推理系列产品bfloat16_tint32_tbfloat16_tfloatAtlas A3 训练系列产品/Atlas A3 推理系列产品Atlas A2 训练系列产品/Atlas A2 推理系列产品初始化操作。gradWeight_.Init((tilingData-dwTiling)); // 初始化gradWeight_相关参数设置卷积的特征矩阵Input、卷积的输出反向GradOutput。gradWeight_.SetGradOutput(gradOutputGm_[offsetA_]); // 设置矩阵gradOutput gradWeight_.SetInput(inputGm_[offsetB_]); // 设置矩阵Input gradWeight_.SetSingleShape(singleShapeM, singleShapeN, singleShapeK); // 设置需要计算的形状 gradWeight_.SetStartPosition(hoStartIdx_); // 设置初始位置完成卷积反向操作。调用Iterate完成单次迭代计算叠加while循环完成单核全量数据的计算。Iterate方式可以自行控制迭代次数完成所需数据量的计算。while (gradWeight_.Iterate()) { gradWeight_.GetTensorC(gradWeightGm_[offsetC_]); }结束卷积反向操作。gradWeight_.End();需要包含的头文件#include lib/conv_backprop/conv3d_bp_filter_api.h【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考