• 文档 >
  • 模块代码 >
  • torch >
  • torch.ao.nn.intrinsic.quantized.modules.conv_relu
快捷键

torch.ao.nn.intrinsic.quantized.modules.conv_relu 的源代码

# mypy: 允许未类型化定义

导入 火炬
导入 torch.ao.nn.intrinsic
导入 torch.ao.nn.intrinsic.qat
导入 torch.ao.nn.quantized 作为 nnq
导入 torch.nn.functional 作为 F
来自 torch.nn.utils 导入 熔合卷积批量归一化权重


__all__ = [
    ConvReLU1d,
    ConvReLU2d,
    ConvReLU3d,
]

_reverse_repeat_padding = 氮气.模块.conv._reverse_repeat_padding


将公共部分提取到 ConvNd 中
[文档] ConvReLU1d(氮气.卷积 1D): r"" ConvReLU1d 模块是 Conv1d 和 ReLU 的融合模块 我们采用与 :class:`torch.ao.nn.quantized.Conv1d` 相同的接口 属性: 与 torch.ao.nn.quantized.Conv1d 相同 ```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) ``` 浮点模块 = 火炬.ao.nn.内在的.ConvReLU1d # 类型:忽略[赋值] 定义 初始化( 自身, 输入通道, 输出通道, 核心大小, 步长=1, 填充=0, 扩展率=1, 群组=1, 偏置=True, 填充模式=, 设备=, 数据类型=, ): 超级().初始化( 输入通道, 输出通道, 核心大小, 步长=步长, 填充=填充, 扩展率=扩展率, 群组=群组, 偏置=偏置, 填充模式=填充模式, 设备=设备, 数据类型=数据类型, ) 定义 前向(自身, 输入): 由于 JIT 问题,暂时使用 len(shape)代替 ndim https://github.com/pytorch/pytorch/issues/23890 如果 长度(输入.shape) != 3: 抛出异常 ValueError("输入形状必须是 `(N, C, L)`!") 如果 自身.填充模式 != : Conv1d 中的填充以(p, p)的形式存储,需要获取(p,) 反复填充反转两次 = 反向重复填充(自身.填充[1]) 输入 = F.填充( 输入, 反转填充重复两次, 模式=自身.填充模式 ) 返回 火炬.操作.量化.卷积 1D_ReLU( 输入, 自身._packed_params, 自身.比例, 自身.零点 ) 定义 _获取名称(自身): 返回 "量化卷积 ReLU1d" @classmethod 定义 从浮点数(, mod, 使用预计算的假量化=错误): 如果 类型(mod) == 火炬.ao.nn.内在的.qat.ConvBnReLU1d: 断言 mod.bn.运行变量 not None mod.bn.运行均值 not None mod.重量, mod.偏差 = 熔合卷积归一化权重( mod.重量, mod.偏置, mod.bn.运行平均值, mod.bn.运行变量, mod.bn.eps, mod.bn.重量, mod.bn.偏置, ) 返回 超级().从浮点数(mod, 使用预计算的假量化) @classmethod 定义 来自参考(, 参考 qconv, 输出尺度, 输出零点): 断言 ( 类型(参考 qconv) != 火炬.ao.nn.内在的.ConvBnReLU1d ), "BatchNorm1d 应在转换为参考模块之前与 Conv1d 合并" 返回 超级().来自参考(参考 qconv[0] 输出尺度, 输出零点)
[文档] ConvReLU2d(氮气.卷积 2D): r"" ConvReLU2d 模块是 Conv2d 和 ReLU 的融合模块 我们采用与 :class:`torch.ao.nn.quantized.Conv2d` 相同的接口。 属性: 与 torch.ao.nn.quantized.Conv2d 相同 ```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) ``` 浮点模块 = 火炬.ao.nn.内在的.ConvReLU2d # 类型:忽略[赋值] 定义 初始化( 自身, 输入通道, 输出通道, 核心大小, 步长=1, 填充=0, 扩展率=1, 群组=1, 偏置=True, 填充模式=, 设备=, 数据类型=, ): 超级().初始化( 输入通道, 输出通道, 核心大小, 步长=步长, 填充=填充, 扩展率=扩展率, 群组=群组, 偏置=偏置, 填充模式=填充模式, 设备=设备, 数据类型=数据类型, ) 定义 前向(自身, 输入): 由于 JIT 问题,暂时使用 len(shape)代替 ndim https://github.com/pytorch/pytorch/issues/23890 如果 长度(输入.shape) != 4: 抛出异常 ValueError("输入形状必须是 `(N, C, H, W)`!") 如果 自身.填充模式 != : 反复填充反转两次 = 反向重复填充(自身.填充) 输入 = F.填充( 输入, 反转填充重复两次, 模式=自身.填充模式 ) 返回 火炬.操作.量化.卷积 2D-ReLU( 输入, 自身._packed_params, 自身.比例, 自身.零点 ) 定义 _获取名称(自身): 返回 量化卷积 ReLU2d @classmethod 定义 从浮点数(, mod, 使用预计算的假量化=错误): 如果 类型(mod) == 火炬.ao.nn.内在的.qat.ConvBnReLU2d: 断言 mod.bn.运行变量 not None mod.bn.运行均值 not None mod.重量, mod.偏差 = 熔合卷积归一化权重( mod.重量, mod.偏置, mod.bn.运行平均值, mod.bn.运行变量, mod.bn.eps, mod.bn.重量, mod.bn.偏置, ) 返回 超级().从浮点数( mod, 使用预计算的假量化=使用预计算的假量化 ) @classmethod 定义 来自参考(, 参考 qconv, 输出尺度, 输出零点): 断言 ( 类型(参考 qconv) != 火炬.ao.nn.内在的.ConvBnReLU2d ), "BatchNorm2d 应在转换为参考模块之前与 Conv2d 合并" 返回 超级().来自参考(参考 qconv[0] 输出尺度, 输出零点)
[文档] ConvReLU3d(氮气.卷积 3D): r"" ConvReLU3d 模块是 Conv3d 和 ReLU 的融合模块 我们采用与 :class:`torch.ao.nn.quantized.Conv3d` 相同的接口。 属性:与 torch.ao.nn.quantized.Conv3d 相同 ```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) ``` 浮点模块 = 火炬.ao.nn.内禀的.ConvReLU3d # 类型:忽略[赋值] 定义 初始化( 自身, 输入通道, 输出通道, 核心大小, 步长=1, 填充=0, 扩展率=1, 群组=1, 偏置=True, 填充模式=, 设备=, 数据类型=, ): 断言 填充模式 != 反射, "Conv3d 不支持反射填充" 超级().初始化( 输入通道, 输出通道, 核心大小, 步长=步长, 填充=填充, 扩展率=扩展率, 群组=群组, 偏置=偏置, 填充模式=填充模式, 设备=设备, 数据类型=数据类型, ) 定义 前向(自身, 输入): 由于 JIT 问题,暂时使用 len(shape)代替 ndim https://github.com/pytorch/pytorch/issues/23890 如果 长度(输入.shape) != 5: 抛出异常 ValueError("输入形状必须是`(N, C, D, H, W)`!") 如果 自身.填充模式 != : 反复填充反转两次 = 反向重复填充(自身.填充) 输入 = F.填充( 输入, 反转填充重复两次, 模式=自身.填充模式 ) 返回 火炬.操作.量化.conv3d_relu( 输入, 自身._packed_params, 自身.比例, 自身.零点 ) 定义 _获取名称(自身): 返回 量化卷积 ReLU3d @classmethod 定义 从浮点数(, mod, 使用预计算的假量化=错误): 如果 类型(mod) == 火炬.ao.nn.内禀的.qat.ConvBnReLU3d: 断言 mod.bn.运行变量 not None mod.bn.运行均值 not None mod.重量, mod.偏差 = 熔合卷积归一化权重( mod.重量, mod.偏置, mod.bn.运行平均值, mod.bn.运行变量, mod.bn.eps, mod.bn.重量, mod.bn.偏置, ) 返回 超级().从浮点数( mod, 使用预计算的假量化=使用预计算的假量化 ) @classmethod 定义 来自参考(, 参考 qconv, 输出尺度, 输出零点): 断言 ( 类型(参考 qconv) != 火炬.ao.nn.内在的.ConvBnReLU3d ), "BatchNorm3d 应在转换为参考模块之前与 Conv3d 合并" 返回 超级().来自参考(参考 qconv[0] 输出尺度, 输出零点)

© 版权所有 PyTorch 贡献者。

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

文档

查看 PyTorch 的全面开发者文档

查看文档

教程

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

查看教程

资源

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

查看资源