问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

卷积计算过程详解(含图示和代码)

创作时间:
作者:
@小白创作中心

卷积计算过程详解(含图示和代码)

引用
CSDN
1.
https://blog.csdn.net/u014267900/article/details/139289257

本文是一篇关于卷积计算的详细教程,从概念解释、图示说明到代码实现,全面介绍了卷积计算的过程。适合对深度学习和图像处理感兴趣的读者阅读。

什么是卷积?

卷积是一种数学运算,通过两个函数f和g生成第三个函数,其本质是一种特殊的积分变换,表征函数f与g经过翻转和平移的重叠部分函数值乘积对重叠长度的积分。卷积在泛函分析中扮演重要角色,可以被看作是“滑动平均”的推广。在信号处理和图像处理等领域,卷积常用于描述一个动态过程,用简单的数学形式描述过去作用对当前的影响。

在卷积神经网络中,卷积层的实现方式实际上是数学中定义的互相关 (cross-correlation)运算,与数学分析中的卷积定义有所不同。

卷积核的计算过程可以用下面的数学公式表示,其中
代表输入图片,
代表输出特征图,
是卷积核参数,它们都是二维数组,
表示对卷积核参数进行遍历并求和。

卷积计算过程图解

卷积具体的计算过程如下图所示:

卷积计算代码详解

下面使用Python代码讲解二维矩阵卷积计算过程。

import numpy as np

def matrix_convolution_2d(matrix: [], kernal: []):
    """
    二维矩阵卷积处理
    :param matrix: 输入二维矩阵
    :param kernal: 输入二维卷积核
    :return: 输出卷积结果
    """
    # 获取矩阵的行数和列数
    _matrix = np.array(matrix)
    _kernal = np.array(kernal)
    rows = len(_matrix)
    cols = len(_matrix[0])
    # 获取卷积核的行数和列数
    kh = len(_kernal)
    kw = len(_kernal[0])
    # 计算卷积结果矩阵的大小
    r_rows = rows - kh + 1
    c_cols = cols - kw + 1
    # 创建一个卷积结果矩阵
    convolution_result = np.empty((r_rows, c_cols))
    for i in range(r_rows):
        for j in range(c_cols):
            # 获取当前子矩阵的切片
            row_slice = slice(i, i + kh)
            col_slice = slice(j, j + kw)
            sub_matrix = _matrix[row_slice, col_slice]
            # 进行卷积操作,卷积核和与子矩阵进行点积后求和
            convolution_result[i][j] = np.sum(_kernal * sub_matrix)
    return convolution_result

if __name__ == '__main__':
    # 定义一个二维矩阵
    matrix = [[1, 2,3],
              [4,5,6],
              [7,8,9]]
    # 定义一个二维卷积核
    kernal = [[0, 1], [2, 3]]
    # 进行二维矩阵卷积处理
    result = matrix_convolution_2d(matrix, kernal)
    # 输出卷积处理结果
    print(result)

计算结果:

[[25. 31.]
 [43. 49.]]
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号