CNN训练fashion_mnist数据集

本文介绍了如何使用Fashion MNIST数据集训练神经网络,包括数据加载、预处理、模型构建(含卷积层、池化层和Dropout)、训练过程以及结果可视化。通过一个简单的回调函数实现早停,确保模型在达到60%精度后停止训练。
摘要由CSDN通过智能技术生成

目录

概要

代码


概要

        fashion_mnist数据集与mnist数据集差不多,都是我们常用的用来训练神经网络的数据集,其中包含10个类别,分别是

name=['T恤','裤子','套衫','裙子','外套','凉鞋','汗衫','运动鞋','包','踝靴']

训练集每个类别的图片包含6000张,总共60000张,测试集每个类别的图片包含1000张,总共10000张,每张图片为28*28的像素数组,常用于分类任务的训练。

这里给网络连接不顺畅的朋友分享数据集下载链接:https://pan.baidu.com/s/1LJg8N4SHgR7nOw6-S9fAGA 
提取码:8h91 

下载好后文件夹里有4个压缩文件,将文件放入C/user/username/.keras/datasets目录下(运行一次程序后会在c盘自动生成该目录,如果没有就再次运行一下)

代码

import numpy as np
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
import matplotlib.pyplot as plt
from tensorflow import keras

fashion_mnist=keras.datasets.fashion_mnist    #下载fashion_mnist数据集
(train_images,train_labels),(test_images,test_labels)=fashion_mnist.load_data()
train_images=train_images.reshape(60000,28,28,1)    #
train_images=train_images/255.0   #归一化
test_images=test_images.reshape(10000,28,28,1)
test_images=test_images/255.0     #归一化

plt.rcParams['font.sans-serif']='SimHei' #python显示正常汉字

class myCallback(tf.keras.callbacks.Callback):  #回调函数,设置当loss小于一定值时训练停止
    def on_epoch_end(self, epoch, logs={}):
        if(logs.get('loss')<0.3):
            print('\nReached 60% accuracy so cancelling training!')
            self.model.stop_training=True

callbacks=myCallback() #实例化myCallback

model=tf.keras.models.Sequential(
    [
        tf.keras.layers.Conv2D(64,(3,3),activation='relu',input_shape=(28,28,1)),  #第一层卷积,卷积核大小为(3*3),步长默认为(1*1),卷积核个数为64,通道个数为1
        tf.keras.layers.MaxPooling2D(2,2),  #第一层最大池化,池化大小为(2*2)
        tf.keras.layers.Dropout(0.5),       #防止过拟合
        tf.keras.layers.Conv2D(64,(3,3),activation='relu'), #第二层卷积,激活函数为relu
        tf.keras.layers.MaxPooling2D(2,2),    #第二层池化
        tf.keras.layers.Dropout(0.5),       #防止过拟合
        tf.keras.layers.Flatten(),          #拉直
        tf.keras.layers.Dense(128,activation='relu'),   #全连接层
        tf.keras.layers.Dense(10,activation='softmax')  #输出10个类别
    ]
)
model.summary() #查看model结构
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])  #设置优化器,损失函数,显示成功率
model.fit(train_images,train_labels,epochs=5,callbacks=[callbacks])       #开始训练,输入train_images,真实值为train_labels,迭代5次,调用callables达到一定成功率结束训练
test_loss=model.evaluate(test_images,test_labels)   #测试集进行测试

##########################################################用于可视化显示测试图片和结果标签
name=['T恤','裤子','套衫','裙子','外套','凉鞋','汗衫','运动鞋','包','踝靴']

result=model.predict(test_images) #result数组用于存放所有测试集的结果标签
def show_pic(n):
    plt.figure()  #绘制figure窗口
    plt.suptitle('测试结果') #标题
    for i in range(n):
        num = np.random.randint(1, 10000) #从10000个测试图片中随机选取
        plt.subplot(4, n/4, i + 1)   #将窗口分为4行n/4列,当前位置为i+1
        plt.axis('off')  #关闭坐标轴
        plt.imshow(test_images[num], cmap='gray')  #开始绘制图片,设置颜色为灰色
        plt.title(str(name[(np.argmax(result[num]))])) #np.argmax()返回最大值的索引,显示对应索引的中文名称
    plt.tight_layout(rect=[0, 0, 1, 0.9])  #调整子图与标签位置
    plt.show()  #显示图片

show_pic(20)  #选择测试集中的20张图片用来可视化显示结果
###########################################################

训练结果:

 

 

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值