qkeras.qtools.quantized_operators.multiplier_impl

multiplier operation implementations.

Functions

assert_neither_input_and_weights_is_floating_point(...)

assert non float type.

Classes

Adder(weight_quantizer, input_quantizer, ...)

adder implementation.

AndGate(weight_quantizer, input_quantizer, ...)

and gate implementation.

FixedPointMultiplier(weight_quantizer, ...)

multiplier for fixed point.

FloatingPointMultiplier(weight_quantizer, ...)

multiplier for floating point.

IMultiplier(weight_quantizer, ...)

abstract class for multiplier.

Mux(weight_quantizer, input_quantizer, ...)

Use mux for the hardware implementation of multiplier.

Shifter(weight_quantizer, input_quantizer, ...)

shifter gate.

XorGate(weight_quantizer, input_quantizer, ...)

Use XorGate for hardware implementation of a multiplier.

class qkeras.qtools.quantized_operators.multiplier_impl.Adder(weight_quantizer, input_quantizer, output_quantizer)[source]

Bases: IMultiplier

adder implementation.

Parameters:
static implemented_as()[source]
class qkeras.qtools.quantized_operators.multiplier_impl.AndGate(weight_quantizer, input_quantizer, output_quantizer)[source]

Bases: IMultiplier

and gate implementation.

Parameters:
static implemented_as()[source]
class qkeras.qtools.quantized_operators.multiplier_impl.FixedPointMultiplier(weight_quantizer, input_quantizer, output_quantizer)[source]

Bases: IMultiplier

multiplier for fixed point.

Parameters:
static implemented_as()[source]
class qkeras.qtools.quantized_operators.multiplier_impl.FloatingPointMultiplier(weight_quantizer, input_quantizer, output_quantizer)[source]

Bases: IMultiplier

multiplier for floating point.

Parameters:
static implemented_as()[source]
class qkeras.qtools.quantized_operators.multiplier_impl.IMultiplier(weight_quantizer, input_quantizer, output_quantizer)[source]

Bases: ABC

abstract class for multiplier.

This class is about how multiplier is implemented in hardware, which can be

mux gate, shifter, adder, etc.

Parameters:
abstractmethod static implemented_as()[source]
name()[source]
Return type:

str

output_quantizer()[source]
class qkeras.qtools.quantized_operators.multiplier_impl.Mux(weight_quantizer, input_quantizer, output_quantizer)[source]

Bases: IMultiplier

Use mux for the hardware implementation of multiplier.

Parameters:
static implemented_as()[source]
class qkeras.qtools.quantized_operators.multiplier_impl.Shifter(weight_quantizer, input_quantizer, output_quantizer)[source]

Bases: IMultiplier

shifter gate.

po2*qbit is implemented as a shifter. output is qbits type.

determin number of bits in the output qbits type:
  1. 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

  2. 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:
  1. 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;

  2. qbits is_sign: since qbits already has a sign bit,

    no extra sign bit needed

  3. qbits no_sign and po2 no_sign: no extra sign bit needed

Parameters:
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.

static implemented_as()[source]
class qkeras.qtools.quantized_operators.multiplier_impl.XorGate(weight_quantizer, input_quantizer, output_quantizer)[source]

Bases: IMultiplier

Use XorGate for hardware implementation of a multiplier.

Parameters:
static implemented_as()[source]
qkeras.qtools.quantized_operators.multiplier_impl.assert_neither_input_and_weights_is_floating_point(multiplier)[source]

assert non float type.

Parameters:

multiplier (IMultiplier)