🧩 为什么需要卷积?
在前面两篇,我们使用了 感知机 和 MLP,但它们都有一个问题:
- 参数量过大:如果输入是一张 256×256×3256 \times 256 \times 3256×256×3 的彩色图像(约 20 万个像素),哪怕只是和第一层的 100 个神经元全连接,也要 20 0000×100=2000万20\,0000 \times 100 = 2000 万200000×100=2000万 个参数。
- 缺乏空间结构利用:全连接层把图像展平成一维,丢失了像素之间的空间关系。
卷积层 (Convolutional Layer) 的核心思想是:
- 用一个小的滤波器(kernel)在图像上滑动;
- 每次计算局部区域的加权和;
- 所有位置共享同一个滤波器参数。
这样带来的好处:
- 参数大幅减少:比如 3×33 \times 33×3 的卷积核只有 9 个参数;
- 保持局部空间特征:能识别边缘、纹理、形状等;
- 平移不变性:物体在图像中移动,卷积特征依然有效。
⚙️ 卷积的数学表达
给定输入图像 III 和卷积核 KKK,卷积运算是:
(I∗K)(i,j)=∑m∑nI(i+m,j+n)⋅K(m,n) (I * K)(i,j) = \sum_m \sum_n I(i+m, j+n) \cdot K(m,n) (I∗K)(i,j)=m∑n∑I(i+m,j+n)⋅K(m,n)
其中,卷积核大小一般是 3×33\times33×3 或 5×55\times55×5。
💻 案例演示:卷积核提取边缘
我们先用 numpy 演示卷积核如何从图像中提取特征。
# -*- coding: utf-8 -*-
"""
深度学习案例③-1:卷积核原理演示
"""
import numpy as np
import matplotlib.pyplot as plt
from scipy import ndimage
import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei'
matplotlib.rcParams['axes.unicode_minus'] = False
# ===== 1. 构造简单图像 =====
img = np.zeros((64,64))
img[16:48, 16:48] = 1.0 # 中间一个白方块
# ===== 2. 定义卷积核(边缘检测)=====
kernel = np.array([[ -1, -1, -1],
[ -1, 8, -1],
[ -1, -1, -1]])
# ===== 3. 进行卷积 =====
edge = ndimage.convolve(img, kernel, mode='constant')
# ===== 4. 可视化 =====
plt.figure(figsize=(8,4))
plt.subplot(1,2,1)
plt.imshow(img, cmap="gray"); plt.title("原始图像"); plt.axis("off")
plt.subplot(1,2,2)
plt.imshow(edge, cmap="gray"); plt.title("卷积提取边缘"); plt.axis("off")
plt.suptitle("卷积核示例:边缘检测")
plt.show()
👉 运行效果:左边是一个白色方块,右边则显示其边缘清晰地被卷积核提取出来。

🧠 CNN 的关键组件
-
卷积层(Convolution Layer)
提取局部空间特征,参数共享,减少计算量。 -
池化层(Pooling Layer)
下采样操作,减少特征尺寸,增强平移不变性。常用 MaxPooling、AveragePooling。 -
非线性激活(ReLU)
引入非线性,使网络能表达复杂函数。 -
全连接层(FC Layer)
将提取的特征整合,最终输出分类结果。
✅ 小结
- CNN 的灵感来自生物视觉系统,通过局部感受野和权值共享大幅减少参数。
- 卷积层能提取图像的边缘、纹理等特征,是遥感图像分类和目标检测的核心。
- 本文通过 卷积核提取边缘 演示了 CNN 的基础原理。
欢迎大家关注下方公众号获取更多内容!!


被折叠的 条评论
为什么被折叠?



