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

用Python编写的Nets.LeNet算法在FashionMNIST数据集上进行服装分类

发布时间:2023-12-11 08:39:56

Nets.Leanet是一种经典的卷积神经网络(CNN)算法,它是由Yann LeCun等人于1998年提出的,广泛应用于手写数字识别任务。在本文中,我们将使用Python编写Nets.Leanet算法,并在FashionMNIST数据集上进行服装分类的示例。

首先,我们需要安装一些必要的Python库,包括tensorflow、keras和matplotlib。

pip install tensorflow
pip install keras
pip install matplotlib

FashionMNIST是一个包含了10个类别的服装图像数据集,每个类别都有6000个训练样本和1000个测试样本。我们可以使用Keras库中的FashionMNIST模块加载数据集。

from keras.datasets import fashion_mnist

# 加载FashionMNIST数据集
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()

加载数据集后,我们可以查看数据集的大小和样本图像的格式。训练集包含60000个样本,每个样本是一个28x28像素的图像。测试集包含10000个样本。

print("训练集大小:", train_images.shape)  # (60000, 28, 28)
print("测试集大小:", test_images.shape)  # (10000, 28, 28)

print("训练标签数量:", len(train_labels))  # 60000
print("测试标签数量:", len(test_labels))  # 10000

print("标签:", train_labels)  # array([9, 0, 0, ..., 3, 0, 5], dtype=uint8)

接下来,我们将对数据进行预处理。首先,我们将像素值缩放到0到1之间,这可以帮助网络更好地处理图像数据。

train_images = train_images / 255.0
test_images = test_images / 255.0

妥善处理数据后,我们可以定义LeNet模型。在Nets.Leanet中,包括两个卷积层、两个池化层和三个全连接层。我们可以使用Keras库来定义模型的结构。

from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Flatten())
model.add(Dense(64, activation='relu'))
model.add(Dense(10, activation='softmax'))

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

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

我们可以使用模型的summary方法来查看每个层的参数数量和模型的总体结构。

model.summary()

在训练模型之前,我们需要对输入数据进行reshape操作,以适应模型的输入要求。

train_images = train_images.reshape((60000, 28, 28, 1))
test_images = test_images.reshape((10000, 28, 28, 1))

现在,我们可以使用模型进行训练。

model.fit(train_images, train_labels, epochs=10, batch_size=64, verbose=1)

训练完成后,我们可以使用测试集评估模型的性能。

test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=0)
print("测试集损失:", test_loss)
print("测试集准确率:", test_acc)

最后,我们可以使用训练好的模型对新的图像进行分类预测。

predictions = model.predict(test_images)

通过这个例子,我们使用Python编写了Nets.Leanet算法,并在FashionMNIST数据集上进行了服装分类。您可以根据您的需求调整模型的结构和参数,并尝试在其他数据集上进行分类任务。