torch.ao.nn.intrinsic.quantized.dynamic.modules.linear_relu 的源代码
# mypy: 允许未类型化定义
导入
火炬
导入 torch.ao.nn.intrinsic
作为 nni
导入 torch.ao.nn.quantized.dynamic
作为 nnqd
__all__ = [LinearReLU]
[文档]
类
线性 ReLU(
氮气.
线性):
r""
由线性模块和 ReLU 模块融合而成的线性 ReLU 模块,可用于动态量化
。
支持同时使用 FP16 和 INT8 量化。
我们采用与 :class:`torch.ao.nn.quantized.dynamic.Linear` 相同的接口。
属性:
与 torch.ao.nn.quantized.dynamic.Linear 相同。
示例:
>>> # xdoctest: +SKIP
>>> m = nn.intrinsic.quantized.dynamic.LinearReLU(20, 30)
>>> input = torch.randn(128, 20)
>>> output = m(input)
>>> 打印(output.size())
torch.Size([128, 30])
```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)
```
浮点模块 = nni.
线性 ReLU
# 类型:忽略[赋值]
定义
初始化(
自身,
输入特征,
输出特征,
偏置=True,
数据类型=
火炬.qint8):
超级().
初始化(
输入特征,
输出特征,
偏置,
数据类型)
定义
前向(
自身, x:
火炬.
张量) ->
火炬.
张量:
如果
自身._packed_params.dtype ==
火炬.qint8:
# TODO 检查此处是否应默认设置 reduce_rage = True
Y = 火炬.
操作.
量化.
线性 ReLU 动态(
x, 自身._packed_params._packed_params,
范围缩减=
真实
)
elif 自身._packed_params.dtype ==
火炬.float16:
Y = 火炬.
操作.
量化.
线性 ReLU 动态 fp16(
x, 自身._packed_params._packed_params
)
否则:
抛出异常
运行时错误(
"不支持动态量化线性 ReLU 的数据类型!")
返回 Y.
到(x.
数据类型)
定义
_获取名称(
自身):
返回
动态量化线性 ReLU
@classmethod
定义
从浮点数(
类, mod,
使用预计算的假量化=
错误):
返回
超级().
从浮点数(
mod, 使用预计算的假量化=
使用预计算的假量化
)
@classmethod
定义
来自参考(
类, ref_qlinear_relu):
返回
超级().
来自参考(ref_qlinear_relu[0])