Skip to content
Snippets Groups Projects
Commit 09bec268 authored by Jerome Hue's avatar Jerome Hue Committed by Olivier BICHLER
Browse files

Improve test for Heaviside backward

parent 2d63028a
No related branches found
No related tags found
1 merge request!146Implement a backward for Heaviside
......@@ -42,14 +42,18 @@ void HeavisideImplCpuBackwardKernel(std::size_t inputLength,
const void* grad_output_,
void* grad_input_) {
/*
* Heaviside is approximated by an arctan function for backward :
* S ~= \frac{1}{\pi}\text{arctan}(\pi U \frac{\alpha}{2})
* \frac{dS}{dU} = \frac{\alpha}{2} \frac{1}{(1+(\frac{\pi U \alpha}{2})^2)}}
* */
const O* output = static_cast<const O*>(output_);
const GO* grad_output = static_cast<const GO*>(grad_output_);
GI* grad_input = static_cast<GI*>(grad_input_);
for (size_t i = 0; i < inputLength; ++i) {
// dx = dy * (1/PI) * (1 / (1 + (PI * x)^2))
// grad_input[i] = (1 / M_PI) * grad_output[i] * static_cast<O>(1.0 / (1.0 + (output[i] * output[i]) * (M_PI * M_PI)));
grad_input[i] = grad_output[i] * static_cast<O>(1.0 / (1.0 + (output[i] * output[i]) * (M_PI * M_PI)));
grad_input[i] = grad_output[i] * static_cast<O>(1.0 / (1.0 + (output[i] * M_PI) * (output[i] * M_PI)));
}
}
......
......@@ -117,13 +117,10 @@ TEST_CASE("[cpu/operator] Heaviside(backward)", "[Heaviside][CPU]") {
op->setInput(IOIndex_t(0), std::make_shared<Tensor>(input));
op->forward();
Log::info("Output : ");
op->getOutput(0)->print();
op->getOutput(0)->setGrad(std::make_shared<Tensor>(grad));
op->backward();
Log::info("Gradient : ");
op->getInput(0)->grad()->print();
auto expectedResult = Tensor(Array1D<float,3>({0.0920, 0.0920, 0.0920}));
REQUIRE(approxEq<float>(*(op->getInput(0)->grad()), expectedResult));
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment