/usr/local/lib64/python3.6/site-packages/torch/nn/intrinsic/qat/modules
NameSizeModeActions
__pycache__/-0755rm
conv_fused.py234320644editdlrm
linear_relu.py15510644editdlrm
__init__.py4570644editdlrm
Edit: /usr/local/lib64/python3.6/site-packages/torch/nn/intrinsic/qat/modules/linear_relu.py (1551B)
import torch import torch.nn.qat as nnqat import torch.nn.intrinsic as nni import torch.nn.functional as F class LinearReLU(nnqat.Linear, nni._FusedModule): r""" A LinearReLU module fused from Linear and ReLU modules, attached with FakeQuantize modules for weight, used in quantization aware training. We adopt the same interface as :class:`torch.nn.Linear`. Similar to `torch.nn.intrinsic.LinearReLU`, with FakeQuantize modules initialized to default. Attributes: weight: fake quant module for weight Examples:: >>> m = nn.qat.LinearReLU(20, 30) >>> input = torch.randn(128, 20) >>> output = m(input) >>> print(output.size()) torch.Size([128, 30]) """ _FLOAT_MODULE = nni.LinearReLU def __init__(self, in_features, out_features, bias=True, qconfig=None): super(LinearReLU, self).__init__(in_features, out_features, bias, qconfig) def forward(self, input): return F.relu(F.linear(input, self.weight_fake_quant(self.weight), self.bias)) @classmethod def from_float(cls, mod): return super(LinearReLU, cls).from_float(mod) def to_float(self): linear = torch.nn.Linear(self.in_features, self.out_features, self.bias is not None) linear.weight = torch.nn.Parameter(self.weight.detach()) if self.bias is not None: linear.bias = torch.nn.Parameter(self.bias.detach()) relu = torch.nn.ReLU() return torch.nn.intrinsic.LinearReLU(linear, relu)