Picture from Internet
现实意义
图像分类问题在电商应用中非常普遍,比如逛商场时,看见一件自己喜欢的衣服,但是不知道品牌样式。这时,可以选择问店员,也可以通过 ‘TB’电商平台提供的扫一扫功能,将图像输入,后台会识别出衣服款式,依据衣服上的文字或者图像特征将其辨别然后为您推荐商品(或许会根据计算出来的结果与其数据库中的其他衣服进行相似度分析,比如余弦相似度等等,然后对其排序,依据排名高低为你推荐类似的衣服)。
闲谈
此次实验是为了辨别出手写的数字(0-9),该实验被视为机器学习图像领域的‘hello world’,非常基础,操作简单,有对应的预处理数据集,模型网络层不会太多,一般 3-4 层即可解决。辨别手写数字与辨别衣服种类的逻辑一样,神经网络模型甚至连参数不改也都可以同样训练,唯一的区别在于:辨别衣服种类的图像输入为衣服而已,在 tensorflow_datasets 中集合该数据集,比如 fasion_mnist。
模型搭建
#导入一些必要的库import tensorflowas tfimport tensorflow.keras as kerasimport tensorflow.keras.datasets as tfdsimport matplotlib.pyplot as plt#下载 MNIST 数据集mnist =tfds.mnist # 加载 mnist 数据集(train_images, train_labels), (test_images,test_labels) = mnist.load_data() # train_images-->训练集中的图像,train_images-->训练集中对应的标签,test对应验证集Downloading datafrom https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz11493376/11490434 [==============================] -0s 0us/ste
MNIST数据集中包括 60000 张训练图像,10000 张验证图像,和与之对应的标签。这些数据来源于社会工人和学生手写的 0-9 的数字。第二行,将整个数据集分为训练集和验证集。
训练集和验证集最大的区别在于,训练集在训练过程中会不断的受反向传播的影响调整参数,而验证集不会。验证集只能在调整后的模型中进行预测,可以判断模型训练的好坏。
观察数据
在训练模型之前,我们先浏览一下数据集的格式。以下代码显示训练集中有 60,000 个图像:
#每个图像由 28 x 28 的像素表示train_images.shape(60000, 28, 28)#同样,训练集中有60,000 个标签:train_labels.shape(60000,)#每个标签都是一个 0 到 9 之间的整数train_labelsarray([5, 0, 4, ..., 5, 6, 8], dtyp