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

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

发布时间:2023-12-11 06:27:29

LeNet是一种经典的卷积神经网络模型,最初由Yann LeCun等人在1998年提出,用于手写数字识别任务。它是一个简单而有效的模型,为后来更复杂的卷积神经网络奠定了基础。

LeNet模型结构由卷积层、池化层和全连接层组成。下面我们来使用Python创建LeNet模型,并举一个手写数字识别的例子。

首先,导入所需的库:

import tensorflow as tf
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

然后,定义模型结构:

def LeNetModel():
    model = tf.keras.Sequential()
    
    #       层卷积层
    model.add(Conv2D(6, kernel_size=(5, 5), activation='relu', input_shape=(28, 28, 1)))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    
    # 第二层卷积层
    model.add(Conv2D(16, kernel_size=(5, 5), activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    
    # 将多维张量展平为一维向量
    model.add(Flatten())
    
    # 全连接层
    model.add(Dense(120, activation='relu'))
    model.add(Dense(84, activation='relu'))
    
    # 输出层,共10类(手写数字识别0-9)
    model.add(Dense(10, activation='softmax'))
    
    return model

在LeNetModel函数中,我们首先创建一个Sequential模型,然后按照LeNet的结构添加不同的层。模型接受28x28的灰度图像作为输入,经过两层卷积池化后,使用Flatten将多维张量展平为一维向量。然后,我们添加全连接层和输出层,最后返回模型。

接下来,我们使用MNIST手写数字数据集来训练和测试LeNet模型。首先,加载数据集:

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

# 将数据集归一化为0-1之间的浮点数
x_train = x_train / 255.0
x_test = x_test / 255.0

# 将数据集的维度从28x28变为4维张量(样本数,高,宽,通道数)
x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)
x_test = x_test.reshape(x_test.shape[0], 28, 28, 1)

然后,创建并编译LeNet模型:

model = LeNetModel()
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

在训练之前,我们可以使用model.summary()函数来查看模型的结构和参数数量:

model.summary()

接下来,训练模型:

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

训练过程完成后,我们可以使用模型预测新的样本:

predictions = model.predict(x_test)

以上就是使用Python创建LeNet卷积神经网络模型结构的步骤和示例。LeNet模型在手写数字识别任务上有良好的表现,在其他图像分类任务上也可以进行适当的调整和应用。希望这个例子能对您理解和使用卷积神经网络模型有所帮助。