文件最后提交记录最后更新时间
3 个月前
4 个月前
4 个月前
4 个月前
4 个月前
4 个月前
3 个月前
6 个月前
4 个月前
README

BinaryCrossEntropyGrad

产品支持情况

产品 是否支持
Ascend 950PR/Ascend 950DT √
Atlas A3 训练系列产品/Atlas A3 推理系列产品 √
Atlas A2 训练系列产品/Atlas A2 推理系列产品 √
Atlas 200I/500 A2 推理产品 ×
Atlas 推理系列产品 √
Atlas 训练系列产品 √

功能说明

  • 算子功能:求二元交叉熵反向传播的梯度值。

  • 计算公式:

    二元交叉熵的计算公式如下:

    zi=−weighti⋅(yi⋅ln(xi)+(1−yi)⋅ln(1−xi))z_i = - weight_i \cdot (y_i \cdot ln(x_i) + (1 - y_i) \cdot ln(1- x_i))

    其中xx表示网络前一层的输出,即正向的预测值;yy表示样本的标签值,求二元交叉熵对xx的偏导:

    ∂z∂x=−weight⋅∂((yi⋅ln(xi)+(1−yi)⋅ln(1−xi))∂x=−weight⋅(∂(y⋅ln(x))∂x+∂((1−y)⋅ln(1−x))∂x)=−weight⋅(yx−(1−y)1−x)=−weight⋅y(1−x)−x(1−y)x(1−x)=−weight⋅y−xx(1−x)=weight⋅x−yx(1−x)\begin{aligned} \frac {\partial z}{\partial x} &= -weight \cdot \frac {\partial ((y_i \cdot ln(x_i) + (1-y_i) \cdot ln(1-x_i))}{\partial x} \\ &= -weight \cdot (\frac {\partial (y \cdot ln(x))}{\partial x} + \frac {\partial ((1-y) \cdot ln(1-x))}{\partial x}) \\ &= -weight \cdot (\frac {y}{x} - \frac {(1-y)}{1-x}) \\ &= -weight \cdot \frac {y(1-x)-x(1-y)}{x(1-x)} \\ &= -weight \cdot \frac {y-x}{x(1-x)} \\ &= weight \cdot \frac {x-y}{x(1-x)} \end{aligned}

    out=grad_output⋅weight⋅x−yx(1−x)out=mean(grad_input) if reduction=meanout = grad\_output \cdot weight \cdot \frac {x-y}{x(1-x)} \\ out = mean(grad\_input) \ if \ reduction = mean

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
x 输入 网络正向前一层的计算结果。数据类型需要与其它参数一起转换到promotion类型。 BFLOAT16、FLOAT16、FLOAT32 ND
y 输入 样本的标签值。数据类型需要与其它参数一起转换到promotion类型,shape可以broadcast到x的shape。 BFLOAT16、FLOAT16、FLOAT32 ND
grad_output 输入 网络反向传播前一步的梯度值。数据类型需要与其它参数一起转换到promotion类型,shape可以broadcast到x的shape。 FLOAT16、BFLOAT16、FLOAT32 ND
weight 输入 结果的权重。数据类型需要与其它参数一起转换到promotion类型,shape可以broadcast到x的shape。 FLOAT16、BFLOAT16、FLOAT32 ND
output 输出 存储梯度计算结果,shape与x相同。 FLOAT16、BFLOAT16、FLOAT32 ND
reduction 属性 表示对二元交叉熵反向求梯度计算结果做的reduce操作。 STRING -

约束说明

无。

调用说明

调用方式 样例代码 说明
aclnn接口 test_aclnn_binary_cross_entropy_backward.cpp 通过aclnnBinaryCrossEntropyBackward接口方式调用BinaryCrossEntropyGrad算子。