卷积神经网络(Convolutional Neural Network, CNN)在计算机视觉领域取得了巨大的成功,它能够自动从图像数据中提取特征,在图像分类、目标检测、语义分割等任务中表现出色。在 CNN 的发展历程中,出现了许多经典的架构,如 LeNet、AlexNet 等,这些架构为后续 CNN 的研究和应用奠定了基础。本文将介绍这些经典架构,并使用 TensorFlow 实现简单示例。
LeNet 是最早的卷积神经网络之一,由 Yann LeCun 等人在 1998 年提出,主要用于手写数字识别任务(MNIST 数据集)。LeNet 架构相对简单,包含卷积层、池化层和全连接层,其主要特点如下:
LeNet 的典型结构包含两个卷积层、两个池化层和三个全连接层,具体结构如下:
import tensorflow as tf
from tensorflow.keras import layers, models
# 构建 LeNet 模型
def LeNet():
model = models.Sequential()
# 卷积层 C1
model.add(layers.Conv2D(6, (5, 5), activation='relu', input_shape=(32, 32, 1)))
# 池化层 S2
model.add(layers.AveragePooling2D((2, 2)))
# 卷积层 C3
model.add(layers.Conv2D(16, (5, 5), activation='relu'))
# 池化层 S4
model.add(layers.AveragePooling2D((2, 2)))
# 展平
model.add(layers.Flatten())
# 全连接层 F5
model.add(layers.Dense(120, activation='relu'))
# 全连接层 F6
model.add(layers.Dense(84, activation='relu'))
# 输出层
model.add(layers.Dense(10, activation='softmax'))
return model
# 创建模型实例
model = LeNet()
# 打印模型结构
model.summary()
AlexNet 由 Alex Krizhevsky 等人在 2012 年提出,在当年的 ImageNet 图像分类竞赛中取得了巨大的成功,它的出现标志着深度学习在计算机视觉领域的崛起。AlexNet 相比 LeNet 有了很大的改进,主要特点如下:
AlexNet 的具体结构如下:
import tensorflow as tf
from tensorflow.keras import layers, models
# 构建 AlexNet 模型
def AlexNet():
model = models.Sequential()
# 卷积层 C1
model.add(layers.Conv2D(96, (11, 11), strides=(4, 4), activation='relu', input_shape=(224, 224, 3)))
# 池化层 S2
model.add(layers.MaxPooling2D((3, 3), strides=(2, 2)))
# 卷积层 C3
model.add(layers.Conv2D(256, (5, 5), padding='same', activation='relu'))
# 池化层 S4
model.add(layers.MaxPooling2D((3, 3), strides=(2, 2)))
# 卷积层 C5
model.add(layers.Conv2D(384, (3, 3), padding='same', activation='relu'))
# 卷积层 C6
model.add(layers.Conv2D(384, (3, 3), padding='same', activation='relu'))
# 卷积层 C7
model.add(layers.Conv2D(256, (3, 3), padding='same', activation='relu'))
# 池化层 S8
model.add(layers.MaxPooling2D((3, 3), strides=(2, 2)))
# 展平
model.add(layers.Flatten())
# 全连接层 F9
model.add(layers.Dense(4096, activation='relu'))
model.add(layers.Dropout(0.5))
# 全连接层 F10
model.add(layers.Dense(4096, activation='relu'))
model.add(layers.Dropout(0.5))
# 输出层
model.add(layers.Dense(1000, activation='softmax'))
return model
# 创建模型实例
model = AlexNet()
# 打印模型结构
model.summary()
LeNet 和 AlexNet 是卷积神经网络发展历程中的重要里程碑,LeNet 为 CNN 的基础架构奠定了基础,而 AlexNet 则开启了深度学习在计算机视觉领域的新纪元。通过 TensorFlow 等深度学习框架,我们可以方便地实现这些经典架构,并在此基础上进行改进和创新,以解决各种实际问题。随着技术的不断发展,后续还出现了许多更先进的 CNN 架构,如 VGG、GoogLeNet、ResNet 等,它们在性能和效率上都有了进一步的提升。