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

用Python编写的LeNet网络架构

发布时间:2023-12-11 06:22:18

LeNet是一个非常经典的卷积神经网络架构,由Yann LeCun和他的团队在20世纪90年代开发。它是 个被广泛用于数字手写识别任务的卷积神经网络,并为后来更复杂的网络架构奠定了基础。

LeNet网络架构主要由两个部分组成:卷积层和全连接层。下面是一个用Python编写的LeNet网络架构的例子,并加入了一个手写数字识别的示例。

首先,我们需要导入需要的库。

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

然后,定义LeNet网络的架构。

class LeNet(tf.keras.Model):
    def __init__(self, num_classes):
        super(LeNet, self).__init__()
        self.conv1 = layers.Conv2D(filters=6, kernel_size=(5, 5), activation='relu')
        self.pool1 = layers.MaxPooling2D(pool_size=(2, 2))
        self.conv2 = layers.Conv2D(filters=16, kernel_size=(5, 5), activation='relu')
        self.pool2 = layers.MaxPooling2D(pool_size=(2, 2))
        self.flatten = layers.Flatten()
        self.fc1 = layers.Dense(units=120, activation='relu')
        self.fc2 = layers.Dense(units=84, activation='relu')
        self.fc3 = layers.Dense(units=num_classes, activation='softmax')

接下来,我们定义前向传播函数。

    def call(self, inputs):
        x = self.conv1(inputs)
        x = self.pool1(x)
        x = self.conv2(x)
        x = self.pool2(x)
        x = self.flatten(x)
        x = self.fc1(x)
        x = self.fc2(x)
        x = self.fc3(x)
        return x

然后,我们可以实例化LeNet模型,并编译模型。

model = LeNet(num_classes=10)
model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

在训练过程中,通常需要加载数据集。这里我们使用经典的MNIST手写数字数据集作为示例。

(x_train, y_train), (x_test, y_test) = tf.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

然后,我们可以对模型进行训练。

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

最后,我们可以评估模型的性能。

test_loss, test_accuracy = model.evaluate(x_test, y_test, verbose=2)
print('Test accuracy:', test_accuracy)

这是一个使用Python编写的LeNet网络架构,并在MNIST数据集上进行手写数字识别的示例。你可以根据需要进行修改和扩展,以适应其他任务和数据集。