一、说明
这是最基本的深度学习框架,最早是对手写支票进行识别,该网络是完整的深度学习基础,对于零基础学员有很大帮助。
二、LeNet 架构:卷积神经网络的基础
LeNet 架构由Yann LeCun及其团队于 20 世纪 80 年代末创建,是图像识别任务的开创性模型。它的诞生为现代卷积神经网络 (CNN) 奠定了基础,它通过引入卷积层、池化层和全连接层等技术,以分层设计捕捉图像中的空间层次结构。LeNet 在数字识别中发挥了关键作用,并激发了深度学习的众多进步。
2.1 LeNet 的关键细节
- 原始应用:LeNet 是为识别手写数字而开发的,特别是用于支票上的邮政编码数字识别。
- 使用的数据集:它首先应用于 MNIST 数据集,该数据集由手写数字(0-9)组成,被广泛用作图像分类任务的基准。
- 竞赛:尽管 LeNet 最初并不是为竞赛而开发的,但它为数字分类任务设定了新的基准,并启发了计算机视觉领域的早期竞赛。
2.2 架构概述
最著名的版本 LeNet-5 由7 层组成,包括卷积层、池化层和全连接层。以下是各层的细分:
- 输入层:接受大小为 32×32 的灰度图像。
- C1——卷积层:使用 6 个大小为 5×5、步幅为 1 的过滤器,生成大小为 28×28 的特征图。
- S2——子采样(池化)层:应用内核大小为 2×2、步幅为 2 的平均池化,将特征图缩小到 14×14。
- C3——卷积层:使用 16 个大小为 5×5 的过滤器,步幅为 1,给出大小为 10×10 的输出特征图。
- S4——子采样(池化)层:再次应用平均池化,得到大小为 5×5 的特征图。
- C5——全连接卷积层:该层有 120 个神经元,每个神经元都连接到上一层的所有 5x5 特征图。
- F6——完全连接层:包含 84 个神经元。
- 输出层:使用softmax激活函数输出10个类(数字0-9)的概率。
2.3 执行卷积后计算图像大小的公式
2.4 LeNet 的优势
- 高效的特征提取:卷积层可以有效地捕捉图像中的空间层次,这使得该模型对于图像数据特别有效。
- 减少参数数量:池化层减少了空间大小,降低了参数数量和计算负荷。
- 基础设计:LeNet 的设计引入了现代 CNN 架构所建立的几个原则,包括 AlexNet、VGG 和 ResNet。
三、python代码:
import tensorflow as tf
from tensorflow.keras import layers, models, datasets
import numpy as np# Load and preprocess the MNIST dataset
(x_train, y_train), (x_test, y_test) = datasets.mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0 # Normalize pixel values
x_train = np.expand_dims(x_train, -1) # Add a channel dimension for grayscale
x_test = np.expand_dims(x_test, -1)model = Sequential()
model.add(Conv2D(6, kernel_size=(5, 5), activation='tanh', input_shape=(28, 28, 1)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(16, kernel_size=(5, 5), activation='tanh'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(120, activation='tanh'))
model.add(Dense(84, activation='tanh'))
model.add(Dense(10, activation='softmax'))# Compile the model
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])# Train the model
model.fit(x_train, y_train, epochs=10, batch_size=64, validation_data=(x_test, y_test))# Evaluate the model
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f'Test Accuracy: {test_acc:.4f}')
四、概括:
在LeNet模型中,卷积、平均池化、全连接层被引入到人们的视野。