如何无需执行实际卷积即可求取水平与垂直卷积轴的最大最小值
无需执行实际卷积即可求取水平、垂直卷积轴极值的方案
完全可以实现,只要你提前确定卷积核的固定参数、输入张量的数值范围、卷积的填充/步长配置,不需要执行逐元素乘加的卷积运算就能直接算出两个方向的输出极值。
计算逻辑前提
仅适用于标准线性卷积场景,要是带非线性激活层的话,把卷积极值算完再代入激活函数计算一次即可,同样不需要执行实际卷积。
水平卷积轴极值计算
- 先拆分卷积核的行维度,统计每一行卷积核的正权重总和、负权重总和两个值
- 提取输入张量对应行的最大值、最小值两个参数
- 最大值计算公式:
输入行最大值 * 正权重总和 + 输入行最小值 * 负权重总和 - 最小值计算公式:
输入行最小值 * 正权重总和 + 输入行最大值 * 负权重总和
举个实际案例:输入行数值范围为[0,255],对应卷积核行为[1,-2,1],正权重和为2,负权重和为-2,直接算出最大值为2552 + 0(-2) = 510,最小值为02 + 255(-2) = -510,不需要遍历整行做卷积计算。
- 要是带固定值填充(比如0填充),只需要把填充值作为固定常量,乘以对应位置的卷积核权重加到总和里即可。
垂直卷积轴极值计算
逻辑和水平轴完全一致,仅把拆分维度换成卷积核的列维度即可:
- 拆分卷积核的列维度,统计每一列卷积核的正权重总和、负权重总和
- 提取输入张量对应列的最大值、最小值
- 套用上面的极值公式直接计算即可。
内容的提问来源于stack exchange,提问作者icelov
相关产品推荐
相关产品推荐

