如何使用TensorFlow在Python中构建Fashion MNIST数据集的模型?
在机器学习和深度学习领域,数据集是训练机器学习模型的重要组成部分。在这篇文章中,我们将探讨如何使用TensorFlow在Python中构建Fashion MNIST数据集的模型。Fashion MNIST是一个常用的图像分类数据集,其中包含10类不同类型的图像。在这个数据集中,每个图像都是28×28像素的灰度图像。
阅读更多:Python 教程
1. 下载和导入数据集
我们可以从TensorFlow的数据集中心或者Kaggle网站上下载Fashion MNIST数据集。如果你使用TensorFlow来下载数据集,则可以使用以下代码:
import tensorflow as tf
from tensorflow import keras
(train_images, train_labels), (test_images, test_labels) = keras.datasets.fashion_mnist.load_data()
在这个代码中,我们使用keras.datasets.fashion_mnist.load_data()
函数来加载Fashion MNIST数据集。该函数返回两个元组:训练集和测试集。每个元组包含两个数组,一个是图像数组,另一个是标签数组。训练集由60,000个样本组成,测试集由10,000个样本组成。
2. 数据可视化
在训练机器学习模型之前,通常需要对数据进行可视化以更好地了解数据。在Fashion MNIST数据集中,每个图像都是灰度图像,因此只有一个通道。我们可以使用Matplotlib库来可视化这些图像:
import matplotlib.pyplot as plt
plt.figure(figsize=(10,10))
for i in range(25):
plt.subplot(5,5,i+1)
plt.xticks([])
plt.yticks([])
plt.grid(False)
plt.imshow(train_images[i], cmap=plt.cm.binary)
plt.xlabel(train_labels[i])
plt.show()
这个代码会生成一个25张训练集样本的子图,每个子图都表示Fashion MNIST数据集的一个图像。默认情况下,轴是关闭并被标记为数字标签。
3. 构建神经网络模型
接下来,我们将构建一个基本的神经网络模型来分类Fashion MNIST数据集中的图像。我们使用Keras库来构建和训练神经网络模型。以下是神经网络模型的代码:
from tensorflow.keras import layers
model = keras.Sequential([
layers.Flatten(input_shape=(28, 28)), # 将28*28矩阵转化为1*784向量
layers.Dense(128, activation=tf.nn.relu), # 直接登录层
layers.Dense(10, activation=tf.nn.softmax) # 输出层
])
在这段代码中,我们使用Sequential()
函数创建一个顺序模型。在该模型中,首先使用Flatten()
函数将28×28的图像矩阵转换为1×784的向量。然后,我们添加一个有128个神经元的密集层,使用ReLU作为激活函数。最后,我们添加一个具有10个神经元的密集层,使用softmax函数作为激活函数。softmax函数将模型的输出映射到10个不同的类别中,每个类别的概率都在0到1之间。
4. 编译和训练模型
在创建神经网络模型之后,我们需要编译模型并使用训练数据集对其进行训练。以下是编译和训练模型的代码:
model.compile(optimizer=tf.optimizers.Adam(),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=10)
在这段代码中,我们首先使用compile()
函数来编译模型。我们使用Adam优化器,分类交叉熵损失函数和准确度指标来训练我们的模型。然后,我们使用fit()
函数将训练数据集传递给模型来训练它。我们将模型训练10个轮次(epoch)。
5. 评估模型
训练模型之后,我们需要评估模型在测试数据集上的表现。以下是评估模型的代码:
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('Test accuracy:', test_acc)
在这段代码中,我们使用evaluate()
函数评估模型在测试数据集上的表现。函数返回测试数据集上的损失和准确率。我们将准确率打印到控制台。
6. 使用模型进行预测
训练模型之后,我们可以使用该模型来进行预测。以下是使用模型进行预测的代码:
predictions = model.predict(test_images)
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
plt.figure(figsize=(10,10))
for i in range(25):
plt.subplot(5,5,i+1)
plt.xticks([])
plt.yticks([])
plt.grid(False)
plt.imshow(test_images[i], cmap=plt.cm.binary)
predicted_label = np.argmax(predictions[i])
true_label = test_labels[i]
if predicted_label == true_label:
color = 'green'
else:
color = 'red'
plt.xlabel("{} ({})".format(class_names[predicted_label],
class_names[true_label]),
color=color)
plt.show()
在这段代码中,我们首先使用predict()
函数对测试数据集中的图像进行预测。我们选择返回预测值的数组。然后,我们将每个图像以及对其进行预测的标签绘制成25张子图。如果预测标签与真实标签不同,则使用红色标注预测标签,否则使用绿色标注预测标签。
结论
在这篇文章中,我们介绍了如何使用TensorFlow在Python中构建Fashion MNIST数据集的模型。我们学习了如何使用Keras库创建神经网络模型,如何编译和训练模型,如何评估模型在测试数据集上的表现以及如何使用模型进行预测。这些知识是构建机器学习和深度学习模型的重要基础。