提交 b0b590ef 编写于 作者: M mindspore-ci-bot 提交者: Gitee

!4760 fix gpu loss grad with reduction

Merge pull request !4760 from baihuawei/loss
...@@ -97,10 +97,14 @@ __global__ void KLDivLossGradKernel(const int input_size, const int reduction, c ...@@ -97,10 +97,14 @@ __global__ void KLDivLossGradKernel(const int input_size, const int reduction, c
dy[i] = (logf(denominator) + 1 - input_x[i]) * dloss[i]; dy[i] = (logf(denominator) + 1 - input_x[i]) * dloss[i];
} }
} else { } else {
T dloss1 = dloss[0];
if (reduction == 1) {
dloss1 = dloss[0] / input_size;
}
for (int i = blockIdx.x * blockDim.x + threadIdx.x; i < input_size; i += blockDim.x * gridDim.x) { for (int i = blockIdx.x * blockDim.x + threadIdx.x; i < input_size; i += blockDim.x * gridDim.x) {
T denominator = max(input_y[i], epsilon); T denominator = max(input_y[i], epsilon);
dx[i] = -input_y[i] * dloss[0]; dx[i] = -input_y[i] * dloss1;
dy[i] = (logf(denominator) + 1 - input_x[i]) * dloss[0]; dy[i] = (logf(denominator) + 1 - input_x[i]) * dloss1;
} }
} }
} }
...@@ -169,10 +173,14 @@ __global__ void BinaryCrossEntropyLossGradKernel(const int input_size, const int ...@@ -169,10 +173,14 @@ __global__ void BinaryCrossEntropyLossGradKernel(const int input_size, const int
dx[i] = value * dloss[i]; dx[i] = value * dloss[i];
} }
} else { } else {
T dloss1 = dloss[0];
if (reduction == 1) {
dloss1 = dloss[0] / input_size;
}
for (int i = blockIdx.x * blockDim.x + threadIdx.x; i < input_size; i += blockDim.x * gridDim.x) { for (int i = blockIdx.x * blockDim.x + threadIdx.x; i < input_size; i += blockDim.x * gridDim.x) {
T denominator = max(input_x[i] * (1 - input_x[i]), epsilon); T denominator = max(input_x[i] * (1 - input_x[i]), epsilon);
T value = weight[i] * (input_x[i] - input_y[i]) / denominator; T value = weight[i] * (input_x[i] - input_y[i]) / denominator;
dx[i] = value * dloss[0]; dx[i] = value * dloss1;
} }
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册