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

使用Python创建LeNet模型

发布时间:2023-12-11 06:17:56

LeNet模型是一个经典的卷积神经网络模型,用于手写数字识别任务。它由Yann LeCun提出,并在MNIST数据集上取得了很好的效果。本文将使用Python创建LeNet模型,并提供一个使用案例。

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

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

接下来,我们将定义LeNet模型的架构。LeNet模型由两个卷积层、池化层和全连接层组成。

model = keras.Sequential(
    [
        layers.Conv2D(6, kernel_size=(5, 5), activation="relu", input_shape=(28, 28, 1)),
        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(10, activation="softmax"),
    ]
)

在上面的代码中,我们使用keras.Sequential创建一个序贯模型,并按照LeNet的架构定义了各个层。 层是一个卷积层,输入大小为28x28x1(表示28x28的灰度图像),有6个卷积核,卷积核大小为5x5,激活函数为ReLU。接着是一个2x2的最大池化层。之后再次重复卷积层和池化层的组合。然后使用Flatten层将多维张量展平为一维。接下来定义两个全连接层,分别有120个和84个神经元,激活函数为ReLU。最后一层是一个包含10个神经元的全连接层,激活函数为softmax,用于进行分类。

接下来我们需要编译模型,并指定损失函数、优化器和评估指标:

model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])

在这里,我们使用交叉熵作为损失函数,Adam优化器进行优化,以及准确率作为评估指标。

现在我们已经定义好了LeNet模型,并编译了模型,可以将其应用于一个示例任务。

我们将使用MNIST数据集,这是一个包含手写数字图像的数据集。首先,我们需要加载和预处理数据集:

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

x_train = x_train.reshape(-1, 28, 28, 1).astype("float32") / 255.0
x_test = x_test.reshape(-1, 28, 28, 1).astype("float32") / 255.0

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

在上述代码中,我们使用keras.datasets.mnist加载MNIST数据集,并将训练集和测试集分别存储在x_train, y_trainx_test, y_test中。然后将输入图像进行归一化处理,像素值除以255,并将标签进行one-hot编码。

接下来,我们可以使用加载的数据进行训练和评估:

model.fit(x_train, y_train, batch_size=64, epochs=10, verbose=1)

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

在上面的代码中,我们使用model.fit进行训练,指定了训练数据、批量大小和训练轮数。然后使用model.evaluate评估模型,并打印测试损失和准确率。

以上就是使用Python创建LeNet模型的步骤和示例。通过这个例子,我们可以学习到如何使用TensorFlow和Keras创建一个经典的卷积神经网络模型,并应用于一个实际的图像分类任务。