用Python对服装图像进行分类
在社交媒体中,图片分类无处不在,从在Facebook、Instagram上挑选个人照片到在Myntra、Amazon、Flipkart等购物应用程序中对衣服图片进行分类。分类已经成为任何电子商务平台的一个组成部分。分类也被用于识别法律和社交网络中的罪犯面孔。
在这篇文章中,我们将学习如何在Python中对图像进行分类。对服装图像进行分类是机器学习中图像分类的一个例子,它意味着将图像分类到它们各自的类别中。为了获得服装图像,我们将使用TensorFlow中的fashion_mnist数据集。这个数据集包含10个不同类别的服装图像。它是初学者的MNIST数据集的替代品,由手写数字组成。我们将在接下来的工作中了解更多关于它的信息。
一步一步实现
第1步:为分类导入必要的库
- TensorFlow :使用python开发和训练模型
- NumPy :用于数组操作
- Matplotlib。用于数据可视化
第2步:加载和探索数据
然后我们加载fashion_mnist数据集,我们看到训练和测试数据的形状。很明显,有60,000张训练图片用于训练数据,10,000张测试图片用于测试模型。它总共包含10个类别的70,000张图片,即 “T恤/上衣”、”裤子”、”套头衫”、”连衣裙”、”外套”、”凉鞋”、”衬衫”、”运动鞋”、”包 “和 “踝靴”。
输出:
标签由一个从0到9的整数阵列组成。由于在fashion_mnist数据集中没有添加类名,我们就把实际的类名存储在一个变量中,以便以后用于数据的可视化。从输出结果来看,我们可以看到像素值在0到255的范围内。
输出:
第3步:对数据进行预处理
下面的代码对数据进行了归一化处理,因为我们可以看到像素值落在0到255的范围内。因此,我们需要用255除以0和1之间的值。
第四步:数据可视化
下面的代码显示了前20张服装图片和它们的类别标签,以确保我们在建立模型时方向正确。在这里,我们将x_train与colormap绘制成二进制,并从我们之前存储的label_class_names数组中添加了每个类别的名称。
输出:
第五步:建立模型
在这里,我们通过创建神经网络的层来建立我们的模型。tf.keras.layer.Flatten()将图像从二维数组转换为一维数组,tf.keras.layer.Dense,有一定的参数,在训练阶段学习。
第6步:编译模型
这里我们使用adam优化器编译模型,SparseCategoricalCrossentropy作为损失函数,并且metrics=[‘准确性’]。
第7步:对所建模型进行数据训练
现在我们将把x_train和y_train即训练数据输入我们已经编译好的模型。model.fit()方法有助于将训练数据装入我们的模型。
输出:
第8步:评估模型的损失和准确性
在这里,我们将通过计算模型的损失和准确性来了解我们的模型有多好。从输出结果中,我们可以看到,测试数据的准确率低于训练数据的准确率。所以这是一个过拟合的模型。
输出
第9步:用测试数据对训练好的模型进行预测
现在我们可以使用测试数据集来对建立的模型进行预测。我们尝试用predictions[0]来预测第一张测试图片,即x_test[0],结果是测试标签9,即Ankle boot。我们添加了Softmax()函数,将线性输出对数转换为概率,因为它更容易计算。
输出:
第10步:预测与实际测试标签的数据可视化
最后,我们将把我们的前24幅图像的预测与实际的类别标签进行可视化,看看我们的模型有多好。
输出:
我们可以清楚地看到,第12个、第17个和第23个预测的分类是错误的,但其余的是正确的。由于在现实中没有一个分类模型可以100%正确,这是我们建立的一个相当好的模型。