用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数据集上进行手写数字识别的示例。你可以根据需要进行修改和扩展,以适应其他任务和数据集。
