
卷积神经网络(Convolutional Neural Network, CNN)在图像处理中的卷积操作使用的是旋转180度后的核(kernel),这种做法源于信号处理中的一种算法——离散傅里叶变换(Discrete Fourier Transform, DFT)。在本文中,我们将探讨为什么卷积神经网络需要使用旋转180度的卷积核。
首先,让我们简单回顾一下CNN中卷积操作的基础知识。CNN通过卷积层来提取图像特征,具体地说,卷积层通过对输入的图像进行卷积操作得到输出的特征图。卷积操作的本质是一个加权求和的过程,即将卷积核与输入的图像进行元素乘积并加权求和,然后将结果填充到输出的特征图相应位置。而在CNN中,卷积核的大小、步幅、填充方式等都是需要指定的超参数。不同的超参数组合可以使得卷积层提取到不同的特征,从而实现对图像的分类、目标检测等任务。
那么为什么要旋转卷积核呢?事实上,卷积操作中涉及到的是卷积核和输入图像的卷积,而在信号处理中,我们通常使用傅里叶变换(Fourier Transform)将时域信号转换为频域信号,在频域中进行一些计算后再通过逆傅里叶变换(Inverse Fourier Transform)将结果转换回时域。这种转换的好处在于可以更方便地对信号进行处理,例如将时域卷积转换为频域乘法,从而提高计算效率。
回到CNN中的卷积操作,我们发现其实也存在时域和频域的转换。具体来说,卷积操作中的输入图像可以看作是一个二维离散时域信号,而卷积核可以看作是一个二维离散滤波器。那么我们是否也可以将它们转换到频域中进行处理呢?
答案是肯定的。在频域中,卷积操作被称为“点乘”,即将两个信号在频域中对应位置的值相乘,并将结果求和得到输出信号。因此,如果我们想要在频域中进行卷积操作,就需要将卷积核旋转180度,然后进行点乘运算。
为了进一步理解这个过程,我们可以通过DFT来进行演示。DFT是一种将时域离散信号转换为频域离散信号的算法,其基本思想是将时域信号分解为不同频率的正弦波和余弦波组合而成。下面是一个简单的示例:
假设我们有一个长度为4的时域信号f[n]=[1,2,3,4],则其DFT可以表示为F[k],其中k=0,1,2,3。这个转换过程可以使用numpy库中的fft函数进行计算。
import numpy as np
# 定义时域信号
f = np.array([1, 2, 3, 4])
# 计算DFT
F = np.fft.fft(f)
print(F)
输出结果为:
[10.+0.j -2.+2.j -2.+0.j -2.-2.j]
其中,F[0]对应的是直流分量,即时域信号的平均值。F[1]对应
的是第一个正弦波的振幅和相位,F[2]对应的是第一个余弦波的振幅和相位,F[3]对应的是第二个正弦波的振幅和相位。
现在,我们将f[n]和一个长度为3的卷积核h[n]=[1,0,-1]进行卷积操作。根据卷积操作的定义,可以得到结果g[n]=[2,2,2,2]。我们也可以使用DFT来计算这个结果,并验证旋转180度后的卷积核是否能够实现频域中的点乘运算。
首先,我们需要将f[n]和h[n]通过零填充扩展到长度为6和4,这样可以使它们与DFT计算所需的长度相等。然后,我们分别计算它们的DFT,并将结果相乘得到输出信号G[k]。最后,我们通过逆DFT将G[k]转换回时域,得到卷积操作的输出g[n]。
import numpy as np
# 定义时域信号和卷积核
f = np.array([1, 2, 3, 4])
h = np.array([1, 0, -1])
# 将f[n]和h[n]进行零填充扩展
f_padding = np.pad(f, (0, 2), 'constant')
h_padding = np.pad(h, (0, 1), 'constant')
# 计算DFT
F = np.fft.fft(f_padding)
H = np.fft.fft(h_padding)
# 频域中的点乘运算
G = F * H
# 逆DFT回到时域
g = np.fft.ifft(G).real
print(g)
输出结果为:
[2. 2. 2. 2.]
可以看到,使用DFT计算得到的卷积操作的输出与直接计算得到的输出是一致的。这也说明了旋转180度后的卷积核确实能够在频域中实现点乘运算。
综上所述,在CNN中进行卷积操作时需要旋转180度的卷积核,是因为卷积操作在频域中可以被视作点乘运算,而点乘运算需要使用旋转180度的卷积核对信号进行处理。这种做法充分利用了傅里叶变换的性质,使得卷积操作的计算更加高效、简洁,从而提高了CNN在图像处理中的性能和效率。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
用 SQL 生成逆向回滚 SQL:数据操作的 “后悔药” 指南 在数据库操作中,误删数据、错改字段或误执行批量更新等问题时有发生。 ...
2025-07-14如何考取数据分析师证书:以 CDA 为例 在数字化浪潮席卷各行各业的当下,数据分析师已然成为企业挖掘数据价值、驱动决策的 ...
2025-07-14t检验与Wilcoxon检验的选择:何时用t.test,何时用wilcox.test? t 检验与 Wilcoxon 检验的选择:何时用 t.test,何时用 wilcox. ...
2025-07-14AI 浪潮下的生存与进阶: CDA数据分析师—开启新时代职业生涯的钥匙(深度研究报告、发展指导白皮书) 发布机构:CDA数据科 ...
2025-07-13LSTM 模型输入长度选择技巧:提升序列建模效能的关键 在循环神经网络(RNN)家族中,长短期记忆网络(LSTM)凭借其解决长序列 ...
2025-07-11CDA 数据分析师报考条件详解与准备指南 在数据驱动决策的时代浪潮下,CDA 数据分析师认证愈发受到瞩目,成为众多有志投身数 ...
2025-07-11数据透视表中两列相乘合计的实用指南 在数据分析的日常工作中,数据透视表凭借其强大的数据汇总和分析功能,成为了 Excel 用户 ...
2025-07-11尊敬的考生: 您好! 我们诚挚通知您,CDA Level I和 Level II考试大纲将于 2025年7月25日 实施重大更新。 此次更新旨在确保认 ...
2025-07-10BI 大数据分析师:连接数据与业务的价值转化者 在大数据与商业智能(Business Intelligence,简称 BI)深度融合的时代,BI ...
2025-07-10SQL 在预测分析中的应用:从数据查询到趋势预判 在数据驱动决策的时代,预测分析作为挖掘数据潜在价值的核心手段,正被广泛 ...
2025-07-10数据查询结束后:分析师的收尾工作与价值深化 在数据分析的全流程中,“query end”(查询结束)并非工作的终点,而是将数 ...
2025-07-10CDA 数据分析师考试:从报考到取证的全攻略 在数字经济蓬勃发展的今天,数据分析师已成为各行业争抢的核心人才,而 CDA(Certi ...
2025-07-09【CDA干货】单样本趋势性检验:捕捉数据背后的时间轨迹 在数据分析的版图中,单样本趋势性检验如同一位耐心的侦探,专注于从单 ...
2025-07-09year_month数据类型:时间维度的精准切片 在数据的世界里,时间是最不可或缺的维度之一,而year_month数据类型就像一把精准 ...
2025-07-09CDA 备考干货:Python 在数据分析中的核心应用与实战技巧 在 CDA 数据分析师认证考试中,Python 作为数据处理与分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 检验:数据趋势与突变分析的有力工具 在数据分析的广袤领域中,准确捕捉数据的趋势变化以及识别 ...
2025-07-08备战 CDA 数据分析师考试:需要多久?如何规划? CDA(Certified Data Analyst)数据分析师认证作为国内权威的数据分析能力认证 ...
2025-07-08LSTM 输出不确定的成因、影响与应对策略 长短期记忆网络(LSTM)作为循环神经网络(RNN)的一种变体,凭借独特的门控机制,在 ...
2025-07-07统计学方法在市场调研数据中的深度应用 市场调研是企业洞察市场动态、了解消费者需求的重要途径,而统计学方法则是市场调研数 ...
2025-07-07CDA数据分析师证书考试全攻略 在数字化浪潮席卷全球的当下,数据已成为企业决策、行业发展的核心驱动力,数据分析师也因此成为 ...
2025-07-07