如何计算矩阵的卷积

article/2025/9/12 8:51:23

昨天立下flag,要开始学习深度学习,深度学习中十分重要的就是卷积神经网络,顾名思义,卷积神经网络中一定会用到卷积。喵哥在博友的一篇博文中看到卷积运算用于图像边缘检测的应用实例,博友十分细心的在截图上做了卷积的运算过程,手动点赞。喵哥最近在看傅里叶变换(连续),对卷积还算记得起一点,但是对图像这种矩阵的卷积运算,的确是没有太多影响,本科学的图像处理的课程真是全部还给老师了。本着勤奋好学的理念,在网上搜了几篇关于矩阵卷积运算的介绍,收获颇丰。但是在看教程时也发现一些小错误和容易引起误会的地方,所以写下这篇博文作为一个日后复习的好去处。

设有矩阵A,B,两者之间的卷积结果可以用公式:

                                      c(j,k) = \sum_{p=-\infty }^{\infty }\sum_{q=-\infty }^{\infty }A(p,q)B(j-p+1,k-q+1)

表示。以上公式表示的是从0开始计数,这不同于MATLAB的从1开始计数,所以公式与MATLAB提供的卷积公式稍有形式上的差异。同一维的数据卷积一样——把卷积模板翻转180°,然后从上至下,从左到右滑动模板,然后计算模板与原始图像交集元素的乘积和,得到的即是卷积后的数值。

假设B是模板,A是原始图像,那么用一组矩形相交关系来表示A,B移动的状态。

1. 两个矩形没有交集

 

2.两个矩形在大矩形的左边相交

 

3. 两个矩形在大矩形上面相交

 

4. 小矩形交于大矩形的左上角

 

5. 小矩形包含于大矩形内部

 

6. 小矩形交于大矩形的右上角

 

7. 小矩形交于大矩形右边

 

8. 小矩形交于大矩形的左下角

 

9. 小矩形交于大矩形的下方

 

10.小矩形交于大矩形的右下

 

这些相交方式的一些集合就构成了各种卷积定义的运算模式。在MATLAB中有三种二维的矩阵卷积定义:valid、same和full。MATLAB对他们的解释为:

'valid'
Returns only those parts of the convolution that are computed without the zero-padded edges. Using this option, size(C) = max([ma-max(0,mb-1),na-max(0,nb-1)],0).'same'
Returns the central part of the convolution of the same size as A.'full'
Returns the full two-dimensional convolution (default).

假设A = \begin{bmatrix} 1 & 2 & 3 & 4 & 5 &6 \\ 2 & 3&4 & 5& 6 &7 \\ 3& 4&5 & 6 &7 &8 \\ 4& 5 & 6& 7 &8 &9 \\ 5 &6 &7 & 8& 9 &10 \\ 6& 7& 8&9 & 10& 11 \end{bmatrix}B = \begin{bmatrix} 1 & 2&3 \\ 4 &5 & 6\\ 7& 8& 9 \end{bmatrix}

在计算卷积A*B时,需要先把B做翻转,得到

B\star = \begin{bmatrix} 9 & 8 & 7\\ 6 & 5 &4 \\ 3 &2 &1 \end{bmatrix},然后把这个翻转的矩阵在大矩阵A中移动。

valid型卷积

valid类型的卷积只考虑B包含于A的情况(即情况5),在矩阵A外围完全不需要补0。若B移动的步长是1,最终的卷积结果的矩阵大小为nc(A) - nc(B) + 1,nc(A),nc(B)分别为A,B矩阵的边长。

1*92*83*7456
2*63*54*4567
3*34*25*1678
456789
5678910
67891011

 

第一个重叠区域的乘积计算,得到的值是111,依次计算得到的卷积矩阵为

                                                                            \begin{bmatrix} 111 & 156 & 201& 246\\ 156& 201& 246& 291\\ 201 &246 & 291& 336\\ 246& 291&336 & 381 \end{bmatrix}

same型卷积

这个类型的卷积在valid的基础上,还要包含小矩阵交于大矩阵的右边缘、下边缘以及右下角重叠的情况(7,9,10)。给A矩阵的右边缘和下边缘补0,这样计算出卷积的矩阵与矩阵A的大小一致。

                                                                    \begin{bmatrix} 20 &44 &65 & 86 &107 &92 \\ 54 &111 &156 &201 &246 &201 \\ 81 & 156 & 201 & 291 & 336 &267 \\ 108& 201& 246 & 291& 336& 267\\ 135 & 246& 291 & 336& 381& 300\\ 140& 245& 284 & 323 & 362 & 276 \end{bmatrix}

full型卷积

这是包含所有重叠情况的卷积类型,即除了第一种分离状态的所有情况,需要在A矩阵四周补0。这样得出的卷积矩阵比A矩阵长2个元素。

full

 

 


http://chatgpt.dhexx.cn/article/SrJXL2Ft.shtml

相关文章

矩阵乘法实现卷积运算

1. 对于普通卷积运算,是使用滑动窗口实现卷积运算: 矩阵根据卷积核的大小进行,从左到右、从上到i下的移动,对应数据相乘再相加得到的数据为该区域的值。 ​​​​​​​ ​​​​​​​ 2.矩阵乘法实现卷积 原理:根据…

各种卷积操作及其矩阵运算

前言 简单来讲,卷积是一种函数和函数产生一个新函数的数学运算,该数学运算的自变量是两个函数f, g(连续或离散都可以,,定义域之外的部分记函数值填充为0),输出为一个函数h,满足 ,或者说,就是对…

矩阵卷积运算的具体过程

矩阵卷积运算的具体过程,很简单 最近在看图像处理,卷积运算这一块也查了很多,但是感觉都写的太复杂,我这里简单的写一下卷积到底是一个什么计算过程。 假设有一个卷积核h,就一般为3*3的矩阵: 有一个待处理…

矩阵卷积运算过程讲解

写了那么久的博客,始于Python爬虫,目前专于Java学习,终于有了属于自己的小窝,欢迎各位访问我的个人网站,未来我们一起交流进步。 在爬虫处理验证码的过程中接触到矩阵卷积运算,关于该类运算,记录…

矩阵的卷积以及使用python计算方法

1、离散⼆维卷积公式 其中A为被卷积矩阵,K为卷积核,B为卷积结果,该公式中,三个矩阵的排序均从0开始。 卷积核、滤波器通常为较小尺寸的矩阵,比如3333、5555等,数字图像是相对较大尺寸的2维(多…

矩阵卷积

1. 矩阵的卷积运算主要用在图像处理中,假设输入信号为x[m,n],激活响应为h[m,n],则其卷积定义为: 2.如果矩阵的中心在边缘就要将原矩阵进行扩展,例如补0 3.卷积的计算步骤: (1) 卷积核绕自己的核心…

隐马尔可夫模型(HMM)及Viterbi算法

HMM简介 对于算法爱好者来说,隐马尔可夫模型的大名那是如雷贯耳。那么,这个模型到底长什么样?具体的原理又是什么呢?有什么具体的应用场景呢?本文将会解答这些疑惑。   本文将通过具体形象的例子来引入该模型&#x…

viterbi算法实例及python实现

Python中hmmlearn给出了三种HMM模型:MultiomialHMM,GaussianHMM,GMMHMM。本文以MultiomialHMM为例,使用《从机器学习到深度学习》中第六章的活动/天气模型进行推算。 假设有这样一个问题,远在另一个城市上大学的儿子每天通过邮件向你汇报他今…

在HMM中实际应用Viterbi算法的例子

在HMM中实际应用Viterbi算法的例子 Viterbi概念动态规划使用HMM的Viterbi算法参考Viterbi概念 本质:动态规划算法 维特比算法是多步骤每步多选择模型的最优选择问题。 其在每一步的所有选择都保存了前续所有步骤到当前步骤当前选择的最小总代价(或者最大价值)以及当前代价…

HMM和viterbi算法初步实践-----中文分词

马尔科夫性质:当一个随机过程在给定现在状态及所有过去状态情况下,其未来状态的条件概率分布仅依赖于当前状态。换句话说,在给定现在状态时,它与过去状态(即该过程的历史路径)是条件独立的(也就是没有任何的…

HMM和Viterbi算法

一、隐马尔可夫模型(Hidden Markov Model) 1、简介 隐含马尔可夫模型并不是俄罗斯数学家马尔可夫发明的,而是美国数学家鲍姆提出的,隐含马尔可夫模型的训练方法(鲍姆-韦尔奇算法)也是以他名字命名的。隐含马…

基于Hmm模型和Viterbi算法的中文分词和词性标注

使用 python 实现基于Hmm模型和Viterbi算法的中文分词及词性标注;使用 最大概率算法 进行优化。最终效果:人民日报语料:分词(F1:96.189%);词性标注(F1:97.934%) 完整代码和数据,参见本实验的 github地址:h…

【生信算法】利用HMM纠正测序错误(Viterbi算法的python实现)

利用HMM纠正测序错误(Viterbi算法的python实现) 问题背景 对两个纯系个体M和Z的二倍体后代进行约~0.05x的低覆盖度测序,以期获得后代个体的基因型,即后代中哪些片段分别来源于M和Z。已知: 后代中基因型为MM、MZ&…

Viterbi算法实现中文分词和词性标注

Viterbi算法 目标过程词典分词统计分词词性标注 附录附录二附录三 源码地址 目标 实现基于词典的分词方法和统计分词方法对分词结果进行词性标注对分词及词性标注结果进行评价,包括4个指标:正确率、召回率、F1值和效率 过程 词典分词 基于词典的分词…

viterbi 算法与python实现

Viterbi算法 (部分内容转自知乎:《如何通俗地讲解 viterbi 算法?》) 1、问题描述 如下如所示,如何快速找到从 S 到 E 的最短路径? 一:遍历穷举法,可行,但速度太慢&am…

维特比算法(viterbi)原理以及简单实现

维特比算法 看一下维基百科的解释,维特比算法(Viterbi algorithm)是一种动态规划算法。它用于寻找最有可能产生观测事件序列的维特比路径——隐含状态序列,特别是在马尔可夫信息源上下文和隐马尔可夫模型中。 通俗易懂的解释知乎…

flask中jsonify遇到的坑

1.jsonify可以将字典转换成json对象传入前端 data {"movie": movie_list,"page": page,"dic_list": dic,"total_page": total_page}>>坑1 字典的值不能为range(x,x),上图dic就是像range(x,x),会报错 …

flask中的jsonify返回的是乱码

用flask返回json时遇到了返回字符串支持中文显示的问题,在web端显示的是utf-8的编码如图; 虽然不影响接口的读取,但是可读性太差,于是研究了一下怎么直接显示成中文。最后找到了解决方案如下,在配置中加入下面一行代码就OK了。 …

request jsonify

python的flask框架为用户提供了直接返回包含json格式数据响应的方法,即jsonify,在开发中会经常用到。如下一段简单的flask后端代码,服务端视图函数根据请求参数返回json格式的数据到客户端。 转载于:https://www.cnblogs.com/daqingzi/p/9018…

Flask使用json或jsonify返回响应的数据

前言 在做网站前后端数据交互的时候,我们经常需要使用Ajax等方法向后端发送请求来获取响应的数据,而我们经常需要的就是json格式的响应数据,它实际上就是一个字符串。要知道Flask如何返回json响应数据,首先就需要知道如何将字典di…