qkeras.qtools.quantized_operators.multiplier_impl
multiplier operation implementations.
Functions
assert non float type. |
Classes
|
adder implementation. |
|
and gate implementation. |
|
multiplier for fixed point. |
|
multiplier for floating point. |
|
abstract class for multiplier. |
|
Use mux for the hardware implementation of multiplier. |
|
shifter gate. |
|
Use XorGate for hardware implementation of a multiplier. |
- class qkeras.qtools.quantized_operators.multiplier_impl.Adder(weight_quantizer, input_quantizer, output_quantizer)[source]
Bases:
IMultiplieradder implementation.
- Parameters:
weight_quantizer (IQuantizer)
input_quantizer (IQuantizer)
output_quantizer (IQuantizer)
- class qkeras.qtools.quantized_operators.multiplier_impl.AndGate(weight_quantizer, input_quantizer, output_quantizer)[source]
Bases:
IMultiplierand gate implementation.
- Parameters:
weight_quantizer (IQuantizer)
input_quantizer (IQuantizer)
output_quantizer (IQuantizer)
- class qkeras.qtools.quantized_operators.multiplier_impl.FixedPointMultiplier(weight_quantizer, input_quantizer, output_quantizer)[source]
Bases:
IMultipliermultiplier for fixed point.
- Parameters:
weight_quantizer (IQuantizer)
input_quantizer (IQuantizer)
output_quantizer (IQuantizer)
- class qkeras.qtools.quantized_operators.multiplier_impl.FloatingPointMultiplier(weight_quantizer, input_quantizer, output_quantizer)[source]
Bases:
IMultipliermultiplier for floating point.
- Parameters:
weight_quantizer (IQuantizer)
input_quantizer (IQuantizer)
output_quantizer (IQuantizer)
- class qkeras.qtools.quantized_operators.multiplier_impl.IMultiplier(weight_quantizer, input_quantizer, output_quantizer)[source]
Bases:
ABCabstract class for multiplier.
- This class is about how multiplier is implemented in hardware, which can be
mux gate, shifter, adder, etc.
- Parameters:
weight_quantizer (IQuantizer)
input_quantizer (IQuantizer)
output_quantizer (IQuantizer)
- class qkeras.qtools.quantized_operators.multiplier_impl.Mux(weight_quantizer, input_quantizer, output_quantizer)[source]
Bases:
IMultiplierUse mux for the hardware implementation of multiplier.
- Parameters:
weight_quantizer (IQuantizer)
input_quantizer (IQuantizer)
output_quantizer (IQuantizer)
- class qkeras.qtools.quantized_operators.multiplier_impl.Shifter(weight_quantizer, input_quantizer, output_quantizer)[source]
Bases:
IMultipliershifter gate.
po2*qbit is implemented as a shifter. output is qbits type.
- determin number of bits in the output qbits type:
- min_exp in po2: number of bits to be expanded on the
right (decimal bits) in qbits for example, min_exp = -2 -> po2 =2^min_exp = 2^(-2) : this means, po2*qbit -> qbit value right shifted for 2 bits
- max_exp in po2: number of bits to be expanded on
the left (int_bits) in qbits
- How to calculate min_exp and max_exp:
- 1.if po2 is_signed (quantized_po2)
one bit for sign for the entire po2 value; *exp has non_sign_bits = bits - 1 number of bits, *furthermore, 1 bit from non_sign_bits is used as sign bit in exp; *value range for exp is [-2 * (non_sign_bits - 1),
2 ** (non_sign_bits - 1) - 1]
- 2.if not_signed (quantized_relu_po2)
0 bit for the entire po2 value
exp has non_sign_bits = bits
rest is the same as above
- determine sign bit in the output qbits:
- qbits no_sign and po2 is_sign: since max_exp and min_exp
are computed without sign bit
we need to add 1 sign bit to the final result;
- qbits is_sign: since qbits already has a sign bit,
no extra sign bit needed
qbits no_sign and po2 no_sign: no extra sign bit needed
- Parameters:
weight_quantizer (IQuantizer)
input_quantizer (IQuantizer)
output_quantizer (IQuantizer)
- input
input_quantizer
- weight
weight_quantizer
- output
output_quantizer
- gate_factor
relative energy comparing to an Adder
- gate_bits
number of bits for energy calculation.
- class qkeras.qtools.quantized_operators.multiplier_impl.XorGate(weight_quantizer, input_quantizer, output_quantizer)[source]
Bases:
IMultiplierUse XorGate for hardware implementation of a multiplier.
- Parameters:
weight_quantizer (IQuantizer)
input_quantizer (IQuantizer)
output_quantizer (IQuantizer)
- qkeras.qtools.quantized_operators.multiplier_impl.assert_neither_input_and_weights_is_floating_point(multiplier)[source]
assert non float type.
- Parameters:
multiplier (IMultiplier)