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

用Python编写LeNet模型进行数字识别与分类

发布时间:2023-12-17 08:16:10

LeNet模型是一个经典的卷积神经网络,最初用于手写数字识别。它由卷积层、池化层和全连接层组成,可以对输入的图像进行特征提取和分类。在本篇文章中,我们将使用Python编写LeNet模型,并通过一个示例展示如何使用该模型进行数字识别与分类。

首先,我们需要导入必要的库,包括NumPy、TensorFlow和Keras。

import numpy as np
import tensorflow as tf
from tensorflow.keras import layers

接下来,我们定义LeNet模型的结构。LeNet模型由两个卷积层、两个池化层和三个全连接层组成。每个卷积层后面都有一个ReLU激活函数,并且最后一个全连接层使用softmax函数作为输出层。

def lenet_model(input_shape, num_classes):
    model = tf.keras.Sequential([
        layers.Conv2D(6, kernel_size=(5, 5), activation='relu', input_shape=input_shape),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Conv2D(16, kernel_size=(5, 5), activation='relu'),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Flatten(),
        layers.Dense(120, activation='relu'),
        layers.Dense(84, activation='relu'),
        layers.Dense(num_classes, activation='softmax')
    ])
    return model

接下来,我们使用MNIST数据集作为示例进行数字识别与分类。首先,我们加载MNIST数据集,并对像素进行归一化和重新排列。

(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()

x_train = x_train.astype('float32') / 255
x_test = x_test.astype('float32') / 255

x_train = np.expand_dims(x_train, -1)
x_test = np.expand_dims(x_test, -1)

input_shape = x_train.shape[1:]
num_classes = 10

y_train = tf.keras.utils.to_categorical(y_train, num_classes)
y_test = tf.keras.utils.to_categorical(y_test, num_classes)

然后,我们创建一个LeNet模型,并进行编译。

model = lenet_model(input_shape, num_classes)
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

接下来,我们使用训练集对LeNet模型进行训练,并在测试集上进行性能评估。

batch_size = 128
epochs = 10

model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, validation_data=(x_test, y_test))

score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

最后,我们可以使用LeNet模型对新的数字图像进行分类预测。

predictions = model.predict(x_test[:10])
predicted_labels = np.argmax(predictions, axis=1)

print('True labels:', np.argmax(y_test[:10], axis=1))
print('Predicted labels:', predicted_labels)

通过使用LeNet模型进行数字识别与分类的示例,我们可以看到模型在MNIST数据集上取得了不错的性能。编写LeNet模型的Python代码相对简单,但对深度学习的原理和算法具有重要的意义,它为我们提供了一个基本的卷积神经网络结构,可用于解决图像分类问题。