summaryrefslogtreecommitdiff
path: root/compiler/luci/pass/src/QuantizeBias.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/luci/pass/src/QuantizeBias.cpp')
-rw-r--r--compiler/luci/pass/src/QuantizeBias.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/compiler/luci/pass/src/QuantizeBias.cpp b/compiler/luci/pass/src/QuantizeBias.cpp
index aa496232a..de97a14dd 100644
--- a/compiler/luci/pass/src/QuantizeBias.cpp
+++ b/compiler/luci/pass/src/QuantizeBias.cpp
@@ -22,6 +22,7 @@
#include <algorithm>
#include <cmath>
+#include <limits>
using namespace luci;
@@ -201,6 +202,18 @@ CircleConst *QuantizeBias::quantized_bias(CircleNode *input, const CircleNode *w
std::vector<float> scaling_factor(size);
std::vector<int64_t> zp(size);
+ if (const_bias->rank() == 0)
+ {
+ // TODO Support quantization of scalar bias
+ throw std::runtime_error("Quantization of scalar bias is not yet supported (" +
+ const_bias->name() + ")");
+ }
+ if (size != const_bias->dim(const_bias->rank() - 1).value())
+ {
+ throw std::runtime_error(const_bias->name() +
+ " (bias) should have the shape of [1, 1, .. 1, channel]");
+ }
+
if (output_type == loco::DataType::U8)
{
new_bias = quant_bias_per_channel(const_bias, input_scale, weight_scale, scaling_factor, zp);
@@ -218,6 +231,7 @@ CircleConst *QuantizeBias::quantized_bias(CircleNode *input, const CircleNode *w
auto quantparam = std::make_unique<CircleQuantParam>();
quantparam->scale = scaling_factor;
quantparam->zerop = zp;
+ quantparam->quantized_dimension = const_bias->rank() - 1;
assert(new_bias->quantparam() == nullptr); // bias should not be quantized before
new_bias->quantparam(std::move(quantparam));