diff options
Diffstat (limited to 'src/runtime/CL/functions/CLFullyConnectedLayer.cpp')
-rw-r--r-- | src/runtime/CL/functions/CLFullyConnectedLayer.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/runtime/CL/functions/CLFullyConnectedLayer.cpp b/src/runtime/CL/functions/CLFullyConnectedLayer.cpp index 6cc2f4bdb7..7fd81cdb94 100644 --- a/src/runtime/CL/functions/CLFullyConnectedLayer.cpp +++ b/src/runtime/CL/functions/CLFullyConnectedLayer.cpp @@ -50,13 +50,20 @@ void CLFullyConnectedLayer::configure_mm(const ICLTensor *input, const ICLTensor { if(_is_quantized) { + // Since we need negative offsets for computing convolution, we need to change QuantizationInfo() // Extract and negate input and weights offset - QuantizationInfo input_quantization_info = input->info()->quantization_info(); - QuantizationInfo weights_quantization_info = weights->info()->quantization_info(); + const QuantizationInfo input_quantization_info = input->info()->quantization_info(); + const QuantizationInfo weights_quantization_info = weights->info()->quantization_info(); + input->info()->set_quantization_info(QuantizationInfo(input_quantization_info.scale, -input_quantization_info.offset)); weights->info()->set_quantization_info(QuantizationInfo(weights_quantization_info.scale, -weights_quantization_info.offset)); + // Configure gemmlowp function _mm_gemmlowp.configure(input, weights, output); + + // Revert back QuantizatioInfo as input and weights could be used in other fully connected layers + input->info()->set_quantization_info(input_quantization_info); + weights->info()->set_quantization_info(weights_quantization_info); } else { |