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.可视化预测结果

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为一个零基础的PyCharm和PyTorch学习者,你可以按照以下步骤来复现AutoEncoder程序: 1. 安装PyTorch和相关依赖:在PyCharm的项目中,你需要先安装PyTorch和其他必要的依赖库。你可以在PyTorch官方网站上找到安装指南。 2. 导入数据集:将原始AutoEncoder-fashion_mnist数据集和VAE-fashion_mnist数据集导入到你的项目中。这些数据集通常是以numpy数组或者其他常见的数据格式提供的。你可以使用PyTorch的数据加载器(如`torchvision.datasets`)来加载数据集。 3. 构建AutoEncoder模型:根据AutoEncoder的代码,你需要定义一个新的PyTorch模型。这通常涉及到创建一个继承自`torch.nn.Module`的类,并在其中定义模型的结构和操作。你可以使用PyCharm的代码编辑器来编写这些代码。 4. 定义损失函数和优化器:根据代码,你需要定义一个适当的损失函数(如均方误差)和优化器(如Adam)。这些函数可以在PyTorch中找到并导入。 5. 训练模型:使用原始AutoEncoder-fashion_mnist数据集,你可以编写训练循环来对模型进行训练。在每个训练迭代中,你需要传递输入数据并通过模型生成输出,然后计算损失并进行反向传播优化模型。这可以使用PyTorch的张量操作和优化器功能来实现。 6. 评估模型:使用VAE-fashion_mnist数据集,你可以编写评估代码来测试训练好的模型的性能。这可能涉及到计算模型在测试数据上的重建误差或其他指标。 7. 调整超参数:根据需要,你可能需要调整模型的超参数(如学习率、隐藏层大小等)。这可以通过修改代码中的参数值来实现。 请注意,以上步骤是一般性的指导,具体实现可能因代码数据集而异。你需要仔细阅读提供的代码和相关文档,并根据需要进行适当的调整和修改。同时,你还可以利用PyCharm提供的代码提示、调试工具和其他功能来帮助你理解和调试代码。 祝你成功复现AutoEncoder程序!如果你在实践过程中遇到任何问题,欢迎随时向我提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值