diff --git a/mace/kernels/activation.h b/mace/kernels/activation.h index b768eb28c93a52502af8dd51f0e6aa13a9a145a8..c9f8dac5873a3cedcac4ff4cddd92c89b91ef9a3 100644 --- a/mace/kernels/activation.h +++ b/mace/kernels/activation.h @@ -116,7 +116,8 @@ class ActivationFunctor { const T *input_ptr = input->data(); T *output_ptr = output->mutable_data(); if (activation_ == PRELU) { - const T *alpha_ptr = alpha == nullptr ? nullptr : alpha->data(); + MACE_CHECK(alpha != nullptr) << "PReLU's alpha parameter shouldn't be null"; + const T *alpha_ptr = alpha->data(); PReLUActivation(input_ptr, output->size(), input->dim(3), alpha_ptr, output_ptr); } else { DoActivation(input_ptr, output_ptr, output->size(), activation_, relux_max_limit_); diff --git a/mace/ops/activation_benchmark.cc b/mace/ops/activation_benchmark.cc index 1037bdcb453e2dc46c0750815c61e1c2fc836ddc..4e904fce84e31762dc03fe23f3047d21d1293eca 100644 --- a/mace/ops/activation_benchmark.cc +++ b/mace/ops/activation_benchmark.cc @@ -139,23 +139,26 @@ static void PreluBenchmark( // Add input data net.AddRandomInput("Input", {batch, height, width, channels}); + net.AddRandomInput("Alpha", {channels}); if (D == DeviceType::OPENCL) { BufferToImage(net, "Input", "InputImage", kernels::BufferType::IN_OUT_CHANNEL); + BufferToImage(net, "Alpha", "AlphaImage", + kernels::BufferType::ARGUMENT); OpDefBuilder("Activation", "PreluBM") .Input("InputImage") + .Input("AlphaImage") .Output("Output") .AddStringArg("activation", "PRELU") - .AddFloatArg("alpha", 2.0) .Finalize(net.NewOperatorDef()); } else { OpDefBuilder("Activation", "PreluBM") .Input("Input") + .Input("Alpha") .Output("Output") .AddStringArg("activation", "PRELU") - .AddFloatArg("alpha", 2.0) .Finalize(net.NewOperatorDef()); }