
卷积神经网络(Convolutional Neural Network,简称CNN)是深度学习中最具代表性的算法之一,尤其在图像识别、计算机视觉领域取得了巨大成功。CNN的设计灵感来源于生物视觉系统,通过模拟人脑处理视觉信息的方式,实现了对图像的高效理解和识别。

CNN的核心操作是卷积运算,其数学表达式为:
S(i,j) = (I * K)(i,j) = Σₘ Σₙ I(m,n) · K(i-m, j-n)
其中:
常用的ReLU激活函数:
f(x) = max(0, x)
最大池化的数学表达:
P(i,j) = max{I(i·s + m, j·s + n) | 0 ≤ m,n < k}
其中s为步长,k为池化窗口大小。

让我们通过经典的MNIST手写数字识别案例,深入了解CNN的工作原理。
MNIST包含60,000张训练图片和10,000张测试图片,每张图片是28×28像素的手写数字(0-9)。

一个典型的MNIST识别CNN包含以下层:
第一层:卷积层
输入:28×28×1(灰度图) | 卷积核:32个5×5的滤波器 | 输出:24×24×32 | 激活函数:ReLU
第二层:池化层
池化窗口:2×2 | 步长:2 | 输出:12×12×32
第三层:卷积层
卷积核:64个5×5的滤波器 | 输出:8×8×64 | 激活函数:ReLU
第四层:池化层
池化窗口:2×2 | 步长:2 | 输出:4×4×64
第五层:全连接层
输入:4×4×64 = 1024个神经元 | 输出:128个神经元 | 激活函数:ReLU | Dropout:0.5(防止过拟合)
第六层:输出层
输入:128个神经元 | 输出:10个神经元(对应0-9十个数字) | 激活函数:Softmax
经过训练,这个简单的CNN模型在MNIST测试集上可以达到99%以上的准确率。这意味着在10,000张测试图片中,只有不到100张会被错误识别。
import tensorflow as tf from tensorflow.keras import layers, models # 构建CNN模型 model = models.Sequential([ layers.Conv2D(32, (5, 5), activation='relu', input_shape=(28, 28, 1)), layers.MaxPooling2D((2, 2)), layers.Conv2D(64, (5, 5), activation='relu'), layers.MaxPooling2D((2, 2)), layers.Flatten(), layers.Dense(128, activation='relu'), layers.Dropout(0.5), layers.Dense(10, activation='softmax') ]) # 编译模型 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # 训练模型 model.fit(train_images, train_labels, epochs=5, validation_data=(test_images, test_labels))
CNN技术仍在快速发展:
从理论公式到实际应用,CNN已经成为人工智能领域最重要的技术之一。无论是自动驾驶汽车、医疗诊断系统,还是我们每天使用的手机面部解锁,背后都有CNN的身影。随着技术的不断进步,CNN将在更多领域发挥重要作用,推动智能化时代的到来。
理解CNN不仅有助于我们更好地使用这项技术,更能启发我们思考如何让机器像人类一样"看"懂这个世界。
END