]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - jacinto-ai/caffe-jacinto.git/commitdiff
net.cpp - fracbits
authorManu Mathew <mathmanu@users.noreply.github.com>
Tue, 24 Jul 2018 11:31:15 +0000 (17:01 +0530)
committerManu Mathew <mathmanu@users.noreply.github.com>
Tue, 24 Jul 2018 11:42:28 +0000 (17:12 +0530)
src/caffe/net.cpp

index 4edba6db511f0a3e3a6a1e10445adf4dedb137bb..820be40382a942ad2ae321133fe24ee35c3223a4 100644 (file)
@@ -2287,8 +2287,13 @@ void Net::EstiamteQScaleParams(float min, float max, int bitwidth, bool power2_s
       (unsigned_data? max_qrange/max_val_abs : max_qrange_half/max_val_abs);
     float scale_target = scale_relative*scale_applied;
 
-    //shiftbits are not integer - so cannot be set accurately.
-    qparam_xx.set_shiftbits(0);
+    //shiftbits is not integer in this case - so cannot be set accurately.
+    //but it may still be needed to simulate rounding in Trim2FixedPoint kernel
+    int estimated_bits = apply_offset? EstimateAbsBits(max_val_range) :
+        (unsigned_data? EstimateAbsBits(max_val_abs) : (EstimateAbsBits(max_val_abs)+1));
+    int shiftbits = estimated_bits - bitwidth;
+
+    qparam_xx.set_shiftbits(shiftbits);
     qparam_xx.set_offset(apply_offset? (0 - min * scale_target) : 0);
     qparam_xx.set_scale_target(scale_target);
   }