1.参考文章
Dataset之Fashion-MNIST:Fashion-MNIST数据集简介、下载、使用方法之详细攻略
fashion-mnist简介和使用及下载
TensorFlow 学习(六)时尚(衣服、鞋、包等) Fashion MNIST识别
fashion-mnist数据集下载至本地并使用
tensorflow官网:Basic classification: Classify images of clothing
1.1 fashion mnist介绍
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200730132645895.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0hKWjEx,size_16,color_FFFFFF,t_70
标签 | 所代表的意思 |
---|---|
0 | 短袖圆领T恤 |
1 | 裤子 |
2 | 套衫 |
3 | 连衣裙 |
4 | 外套 |
5 | 凉鞋 |
6 | 衬衫 |
7 | 运动鞋 |
8 | 包 |
9 | 短靴 |
2.demo
# -*- coding: utf-8 -*-
# TensorFlow and tf.keras
"""
Fashion MNIST的目标是作为经典MNIST数据的替换——通常被用作计算机视觉机器学习程序的“Hello, World”。MNIST数据集包含手写数字(0,1,2等)的图像,格式与我们将在这里使用的衣服相同
使用了时尚MNIST的多样性,因为它是一个比常规MNIST稍微更具挑战性的问题。这两个数据集都相对较小,用于验证算法是否按预期工作。它们是测试和调试代码的好起点
我们将使用6万张图片来训练网络和1万张图片来评估网络对图片的分类有多精确。
"""
import tensorflow as tf
from tensorflow import keras
import numpy as np
import numpy as np
import matplotlib.pyplot as plt
import gzip
import os
import matplotlib
# 下载中文支持字体。后面画图需要
zhfont = matplotlib.font_manager.FontProperties(fname='./datas/fashion_mnist/SimHei-windows.ttf')
# 解析解压得到四个训练的数据
def read_data():
files = [
'train-labels-idx1-ubyte.gz', 'train-images-idx3-ubyte.gz',
't10k-labels-idx1-ubyte.gz', 't10k-images-idx3-ubyte.gz'
]
# 我在当前的目录下创建文件夹,里面放入上面的四个压缩文件
current = './datas/fashion_mnist'
paths = []
for i in range(len(files)):
paths.append('./datas/fashion_mnist/' + files[i])
with gzip.open(paths[0], 'rb') as lbpath:
y_train = np.frombuffer(lbpath.read(), np.uint8, offset=8)
with gzip.open(paths[1], 'rb') as imgpath:
x_train = np.frombuffer(
imgpath.read(), np.uint8, offset=16).reshape(len(y_train), 28, 28)
with gzip.open(paths[2], 'rb') as lbpath:
y_test = np.frombuffer(lbpath.read(), np.uint8, offset=8)
with gzip.open(paths[3], 'rb') as imgpath:
x_test = np.frombuffer(
imgpath.read(), np.uint8, offset=16).reshape(len(y_test), 28, 28)
return (x_train, y_train), (x_test, y_test)
# 分别得到训练数据集和测试数据集
(train_images, train_labels), (test_images, test_labels) = read_data()
class_names = ['短袖圆领T恤', '裤子', '套衫', '连衣裙', '外套',
'凉鞋', '衬衫', '运动鞋','包', '短靴']
# 创建一个新图形
plt.figure()
# 显示一张图片在二维的数据上 train_images[0] 第一张图
plt.imshow(train_images[0])
# 在图中添加颜色条
plt.colorbar()
# 是否显示网格线条,True: 显示,False: 不显示
plt.grid(False)
# 训练图像缩放255,在0 和 1 的范围
train_images = train_images / 255.0
# 测试图像缩放
test_images = test_images / 255.0
# 保存画布的图形,宽度为 10 , 长度为10
plt.figure(figsize=(10, 10))
# 显示训练集的 25 张图像
for i in range(25):
# 创建分布 5 * 5 个图形
plt.subplot(5, 5, i + 1)
plt.xticks([])
plt.yticks([])
plt.grid(False)
# 显示照片,以cm 为单位。
plt.imshow(train_images[i], cmap=plt.cm.binary)
# 此处就引用到上面的中文字体,显示指定中文,对应下方的图片意思,以证明是否正确
plt.xlabel(class_names[train_labels[i]], fontproperties=zhfont)
# 建立模型
def build_model():
# 线性叠加
model = tf.keras.models.Sequential()
# 改变平缓输入
model.add(tf.keras.layers.Flatten(input_shape=(28, 28)))
# 第一层紧密连接128神经元
model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu))
# 第二层分10 个类别
model.add(tf.keras.layers.Dense(10, activation=tf.nn.softmax))
return model
# 编译模型
model = build_model()
model.compile(optimizer=tf.train.AdamOptimizer(),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 训练模型
model.fit(train_images, train_labels, epochs=5)
# 评估模型(主要是测试数据集)
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('测试损失:%f 测试准确率: %f' % (test_loss, test_acc))
predictions = model.predict(test_images)
# 提取20个数据集,进行预测判断是否正确
for i in range(25):
pre = class_names[np.argmax(predictions[i])]
tar = class_names[test_labels[i]]
print("预测:%s 实际:%s" % (pre, tar))
# 保存画布的图形,宽度为 10 , 长度为10
plt.figure(figsize=(10, 10))
# 预测 25 张图像是否准确,不准确为红色。准确为蓝色
for i in range(25):
# 创建分布 5 * 5 个图形
plt.subplot(5, 5, i + 1)
plt.xticks([])
plt.yticks([])
plt.grid(False)
# 显示照片,以cm 为单位。
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 = 'black'
else:
color = 'red'
plt.xlabel("{} ({})".format(class_names[predicted_label],
class_names[true_label]),
color=color,
fontproperties=zhfont)
plt.show()
Epoch 1/5
60000/60000 [==============================] - 6s - loss: 0.5024 - acc: 0.8225
Epoch 2/5
60000/60000 [==============================] - 6s - loss: 0.3784 - acc: 0.8635
Epoch 3/5
60000/60000 [==============================] - 6s - loss: 0.3398 - acc: 0.8764
Epoch 4/5
60000/60000 [==============================] - 6s - loss: 0.3143 - acc: 0.8841
Epoch 5/5
60000/60000 [==============================] - 6s - loss: 0.2954 - acc: 0.8911
9920/10000 [============================>.] - ETA: 0s测试损失:0.342574 测试准确率: 0.878800
预测:短靴 实际:短靴
预测:套衫 实际:套衫
预测:裤子 实际:裤子
预测:裤子 实际:裤子
预测:衬衫 实际:衬衫
预测:裤子 实际:裤子
预测:外套 实际:外套
预测:衬衫 实际:衬衫
预测:凉鞋 实际:凉鞋
预测:运动鞋 实际:运动鞋
预测:外套 实际:外套
预测:凉鞋 实际:凉鞋
预测:凉鞋 实际:运动鞋
预测:连衣裙 实际:连衣裙
预测:外套 实际:外套
预测:裤子 实际:裤子
预测:套衫 实际:套衫
预测:套衫 实际:外套
预测:包 实际:包
预测:短袖圆领T恤 实际:短袖圆领T恤
预测:套衫 实际:套衫
预测:凉鞋 实际:凉鞋
预测:运动鞋 实际:运动鞋
预测:凉鞋 实际:短靴
预测:裤子 实际:裤子
2.1.显示一个图片
2.2.显示训练集25个图片
2.2.显示预测对比图片
3.代码结构
tensorflow-keras-fashion-mnist
1.导入包
np,plt,gzip,os,matpoltlib
2.中文字体
SimHei-windows.ttf
3.解压fashion_mnist数据集
read_data()
train_imaes,train_labels,test_images,test_labels
4.可视化训练集图片样例
plt.figure;plt.imshow();plt.colorbar();plt.grid()
5.图像缩放[0,1]
/255
6.可视化训练集25图
plt.subplots(),plt.xlabel(class_names[train_labels[i]], fontproperties=zhfont)
7.构建模型
model = tf.keras.models.Sequential()
model.add()
8.编译模型
model = build_model()
model.compile(optimizer=tf.train.AdamOptimizer(),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
9.训练模型
model.fit(train_images, train_labels, epochs=5)
10.评估模型
test_loss, test_acc = model.evaluate(test_images, test_labels)
11.预测
predictions = model.predict(test_images)
12.查看预测效果
print("预测:%s 实际:%s" % (pre, tar))