• 文档 >
  • 模块代码 >
  • torch >
  • torch.ao.nn.qat.modules.linear
快捷键

torch.ao.nn.qat.modules.linear 的源代码

# mypy: 允许未类型化定义
导入 火炬
导入 torch.nn 作为 然后
导入 torch.nn.functional 作为 F
来自 torch.ao.nn.intrinsic 导入 线性 ReLU
来自 torch.nn.utils.parametrize 导入 (
    已参数化,
    转移参数化和参数,
    参数化前的类型,
)


__all__ = ["线性"]


[文档] 线性(nn.线性): r"" 附带 FakeQuantize 模块的线性模块, 用于量化感知训练。 我们采用与 `torch.nn.Linear` 相同的接口,请参阅文档。 https://pytorch.org/docs/stable/nn.html#torch.nn.Linear 与 `torch.nn.Linear` 类似,FakeQuantize 模块已初始化为: 默认。 属性: weight:权重 fake quant 模块 ```python # 假设输入文本为: input_text = '"""' # 翻译函数(此处仅为示例,实际翻译功能需要调用真实的翻译 API) def translate_to_simplified_chinese(text): # 这里应该调用真实的翻译 API 进行翻译 # 由于示例中不使用真实的 API,以下为模拟翻译结果 return text # 输出翻译结果 translated_text = translate_to_simplified_chinese(input_text) print(translated_text) ``` 浮点模块 = nn.线性 def 初始化( 自身, 输入特征, 输出特征, 偏差=True, qconfig=, 设备=, 数据类型=, ) -> : 工厂参数 = {"设备": 设备, "dtype": 数据类型} 超级().初始化(输入特征, 输出特征, 偏差, **工厂参数) 断言 qconfig, "必须为 QAT 模块提供 qconfig" 自身.qconfig = qconfig 自身.weight_fake_quant = qconfig.重量(工厂参数=工厂参数) def 前向(自身, 输入): 返回 F.线性(输入, 自身.权重伪量化(自身.重量), 自身.偏差)
[文档] @类方法 def from_float(cls, mod, use_precomputed_fake_quant=False): r"""从浮点模块或 qparams_dict 创建 qat 模块 Args: `mod` 一个浮点模块,可以是 torch.ao.quantization 工具生成的 或直接由用户提供 """ 断言 type_before_parametrizations(mod) == cls._FLOAT_MODULE, " qat." + cls.__name__ + ".from_float 仅适用于 " + cls._FLOAT_MODULE.__name__ ) 断言 hasattr(mod, "qconfig"), "输入浮点模块必须定义 qconfig" 断言 mod.qconfig,"输入浮点模块必须具有有效的 qconfig" 如果 type_before_parametrizations(mod) == LinearReLU: mod = mod[0] qconfig = mod.qconfig qat_linear = cls( mod.in_features, mod.out_features, bias=mod.bias is not None, qconfig=qconfig, ) 如果模型 is_parametrized(mod, "weight"): 将模型 mod 的参数化和参数 transfer_parametrizations_and_params(qat_linear, "weight") else: qat_linear.weight = mod.weight if is_parametrized(mod, "bias"): transfer_parametrizations_and_params(mod, qat_linear, "bias") else: qat_linear.bias = mod.bias return qat_linear
def 转换为浮点数
(自身): 线性 = 火炬.nn.线性( 自身.输入特征, 自身.输出特征, 自身.bias not None ) 线性.权重 = 火炬.nn.参数(自身.重量.detach()) 如果 自身.bias not : 线性.bias = 火炬.nn.参数(自身.偏差.detach()) 线性.训练(自身.训练) 返回 线性

© 版权所有 PyTorch 贡献者。

使用 Sphinx 构建,并使用 Read the Docs 提供的主题。

文档

查看 PyTorch 的全面开发者文档

查看文档

教程

深入了解初学者和高级开发者的教程

查看教程

资源

查找开发资源,获取您的疑问解答

查看资源