Giter Club home page Giter Club logo

Comments (4)

laumecha avatar laumecha commented on June 6, 2024

Searching on the other issue (#60), I have found that if I define alpha=1 the parameters of all the layers are quantized after the model_save_quantized_weights function.

However, is this correct? If yes, why is this happening? And why the batch normalization layers are not quantized?

from qkeras.

jurevreca12 avatar jurevreca12 commented on June 6, 2024

When you save a model as "model_save_quantized_weights" you might be expecting only integers, or fixed-point literals that are power-of-two, I guess? But numbers can in general be quantized also to values that are outside of the scope of the aforementioned representations. However, some quantization approaches are more sensible then others, of course.
The quantized quantized_bits works on a tensor level and it does something like this:
Wq = alpha * W
Where W is the real-valued weights, Wq is the quantized-values. So for instance if you are computing W*x + b then you can compute this as: (Wq*x) / alpha + b. So what do you gain here? well if we limit Wq to only 4-bit numbers, and also x is a n-bit number, then we can use a integer multiplier to compute this, instead of a floating-point multiplier. But of course we still need to divide by alpha. So in general this doesn't necessary help us. But if we limit ourselves to alphas that are power-of-two, then we can compute this division as a shift operation, which if far more efficient. QKeras allows you to limit yourself to only power-of-two alphas, by setting the alpha parameter to "alpha_po2". You can also manually choose alpha=1 then it will always be 1, but then you will likely get worse results with your network.

I recommend you read a survey paper on quantization techniques. I recommend something like this:https://arxiv.org/pdf/2106.08295.pdf. It will help you understand how quantization aware training works.

from qkeras.

jurevreca12 avatar jurevreca12 commented on June 6, 2024

Regarding Batch normalization layers, they are typically folded in the preceding active layer (dense or conv typically). This is also described in the paper I mentioned in the subsection "Batch normalization folding".

from qkeras.

laumecha avatar laumecha commented on June 6, 2024

Oh, I see. Now I understand. Thank you very much for your help!

from qkeras.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.