Fashion_MNIST数据集-tensorflow代码练习

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))

13.可视化预测结果

在这里插入图片描述

©️2020 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值