(
self,
layer: Layer,
weight_bits: int = 8,
activation_bits: int = 8,
moving_rate: float = 0.9,
weight_quantize_type: _QuantType = 'abs_max',
activation_quantize_type: _QuantType = 'abs_max',
weight_pre_layer: Layer | None = None,
act_pre_layer: Layer | None = None,
weight_quant_layer: Layer | None = None,
act_quant_layer: Layer | None = None,
)
| 551 | bias: Tensor |
| 552 | |
| 553 | def __init__( |
| 554 | self, |
| 555 | layer: Layer, |
| 556 | weight_bits: int = 8, |
| 557 | activation_bits: int = 8, |
| 558 | moving_rate: float = 0.9, |
| 559 | weight_quantize_type: _QuantType = 'abs_max', |
| 560 | activation_quantize_type: _QuantType = 'abs_max', |
| 561 | weight_pre_layer: Layer | None = None, |
| 562 | act_pre_layer: Layer | None = None, |
| 563 | weight_quant_layer: Layer | None = None, |
| 564 | act_quant_layer: Layer | None = None, |
| 565 | ) -> None: |
| 566 | super().__init__() |
| 567 | # For Conv2D |
| 568 | self._groups = layer._groups |
| 569 | self._stride = layer._stride |
| 570 | self._padding = layer._padding |
| 571 | self._padding_mode = layer._padding_mode |
| 572 | if self._padding_mode != 'zeros': |
| 573 | self._reversed_padding_repeated_twice = ( |
| 574 | layer._reversed_padding_repeated_twice |
| 575 | ) |
| 576 | self._dilation = layer._dilation |
| 577 | self._data_format = layer._data_format |
| 578 | self.weight = layer.weight |
| 579 | self.bias = layer.bias |
| 580 | |
| 581 | # For FakeQuant |
| 582 | self._conv2d_quant_axis = 0 |
| 583 | if weight_quant_layer is not None: |
| 584 | self._fake_quant_weight = weight_quant_layer() |
| 585 | else: |
| 586 | self._fake_quant_weight = _get_fake_quant_type( |
| 587 | weight_quantize_type, |
| 588 | name=self.weight.name, |
| 589 | moving_rate=moving_rate, |
| 590 | quant_bits=weight_bits, |
| 591 | dtype=self._dtype, |
| 592 | quant_on_weight=True, |
| 593 | channel_num=self.weight.shape[self._conv2d_quant_axis], |
| 594 | quant_axis=self._conv2d_quant_axis, |
| 595 | ) |
| 596 | if act_quant_layer is not None: |
| 597 | self._fake_quant_input = act_quant_layer() |
| 598 | else: |
| 599 | self._fake_quant_input = _get_fake_quant_type( |
| 600 | activation_quantize_type, |
| 601 | name=layer.full_name(), |
| 602 | moving_rate=moving_rate, |
| 603 | quant_bits=activation_bits, |
| 604 | dtype=self._dtype, |
| 605 | quant_on_weight=False, |
| 606 | ) |
| 607 | |
| 608 | self._act_preprocess = ( |
| 609 | act_pre_layer() if act_pre_layer is not None else None |
| 610 | ) |
nothing calls this directly
no test coverage detected