欢迎访问宙启技术站
智能推送

使用Python创建LeNet卷积神经网络结构

发布时间:2023-12-11 06:23:00

卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习模型,在图像识别、目标检测等计算机视觉任务中取得了重要的突破。LeNet是CNN的经典模型之一,由Yann LeCun等人于1998年提出,主要用于识别手写数字图像。

LeNet模型的结构较简单,它由卷积层、汇聚层和全连接层组成。下面我们将使用Python实现LeNet模型,并使用MNIST数据集进行手写数字分类任务的示例。

首先,我们需要导入所需的库和模块:

import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.datasets import mnist

接着,我们加载MNIST数据集,并对数据进行预处理:

(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

# 对数据进行归一化和重新调整大小
train_images = train_images.reshape((60000, 28, 28, 1))
train_images = train_images.astype('float32') / 255

test_images = test_images.reshape((10000, 28, 28, 1))
test_images = test_images.astype('float32') / 255

# 对标签进行编码
train_labels = tf.keras.utils.to_categorical(train_labels)
test_labels = tf.keras.utils.to_categorical(test_labels)

然后,我们创建LeNet模型的网络结构:

model = models.Sequential()

#       层:卷积层
model.add(layers.Conv2D(6, (5, 5), activation='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))

# 第二层:卷积层
model.add(layers.Conv2D(16, (5, 5), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))

# 第三层:全连接层
model.add(layers.Flatten())
model.add(layers.Dense(120, activation='relu'))

# 第四层:全连接层
model.add(layers.Dense(84, activation='relu'))

# 第五层:输出层(10个类别)
model.add(layers.Dense(10, activation='softmax'))

# 输出模型结构
model.summary()

接下来,我们编译模型,并进行训练:

model.compile(optimizer='adam',
              loss=tf.keras.losses.CategoricalCrossentropy(),
              metrics=['accuracy'])

history = model.fit(train_images, train_labels, 
                    epochs=10, 
                    validation_data=(test_images, test_labels))

在训练完成后,我们可以打印模型在测试集上的准确率:

test_loss, test_acc = model.evaluate(test_images, test_labels)
print('Test accuracy:', test_acc)

以上就是使用Python创建LeNet卷积神经网络结构的示例代码。通过对MNIST手写数字数据集的训练,我们可以得到一个在测试集上准确率较高的分类模型。LeNet模型的结构简单而有效,为后续更复杂的卷积神经网络的设计提供了重要的基础。