CNN识别Fashion-MNIST

Fashion_MNIST数据集是一个替代MNIST手写数据集的图片数据集。它是由Zalando(一家德国的时尚科技公司)旗下的研究部门提供。其涵盖了来自10种类别的共7万个不同商品的正面图片。 Fashion_MNIST 的大小、格式和训练集/测试集划分与原始的 MNIST 完全一致。60000/10000 的训练测试数据划分,28x28 的灰度图片。你可以直接用它来测试你的机器学习和深度学习算法性能,且不需要改动任何的代码。

下面通过卷积神经网络来实现Fashion_MNIST数据集的分类

import tensorflow as tf
from tensorflow import keras

# Helper libraries
import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"
import numpy as np
import matplotlib.pyplot as plt

下载数据集并加载

EAGER = True

fashion_mnist = keras.datasets.fashion_mnist
class_names = ['T-shirt/top','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']

(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()

plt.figure(figsize=(10,10)) #显示前25张图像
for i in range(25):
    plt.subplot(5,5,i+1)
    plt.grid(False)
    plt.imshow(train_images[i],cmap=plt.cm.binary)

plt.show()

print(train_images.shape,train_labels.shape)

# 将图像的数据类型转换成浮点型,再将像素值缩小到0-1,完成数据的预处理
train_images = train_images.reshape([-1,28,28,1]) / 255.0
test_images = test_images.reshape([-1,28,28,1]) / 255.0

 

 

(60000, 28, 28) (60000,)

进行CNN网络模型的搭建,该网络模型包括两层卷积层,然后每个卷积层后面跟着一个池化层,接着将经过第二次池化的数据进行展平,最后连接两层全连接层。

model = keras.Sequential([
    #(-1,28,28,1)->(-1,28,28,32)
    keras.layers.Conv2D(input_shape=(28, 28, 1),filters=32,kernel_size=5,strides=1,padding='same'),     # Padding method),
    #(-1,28,28,32)->(-1,14,14,32)
    keras.layers.MaxPool2D(pool_size=2,strides=2,padding='same'),
    #(-1,14,14,32)->(-1,14,14,64)
    keras.layers.Conv2D(filters=64,kernel_size=3,strides=1,padding='same'),     # Padding method),
    #(-1,14,14,64)->(-1,7,7,64)
    keras.layers.MaxPool2D(pool_size=2,strides=2,padding='same'),
    #(-1,7,7,64)->(-1,7*7*64)
    keras.layers.Flatten(),
    #(-1,7*7*64)->(-1,256)
    keras.layers.Dense(256, activation=tf.nn.relu),
    #(-1,256)->(-1,10)
    keras.layers.Dense(10, activation=tf.nn.softmax)
])

print(model.summary())

 

 基于fashion_minist train 数据对模型进行训练

lr = 0.001
epochs = 5
# 编译模型
model.compile(optimizer=tf.train.AdamOptimizer(lr),
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# 拟合数据
model.fit(train_images, train_labels, epochs=epochs,validation_data=[test_images[:1000],test_labels[:1000]])

 

Train on 60000 samples, validate on 1000 samples
Epoch 1/5
60000/60000 [==============================] - 9s 152us/step - loss: 0.3812 - acc: 0.8621 - val_loss: 0.3128 - val_acc: 0.8900
Epoch 2/5
60000/60000 [==============================] - 7s 113us/step - loss: 0.2506 - acc: 0.9080 - val_loss: 0.3029 - val_acc: 0.8970
Epoch 3/5
60000/60000 [==============================] - 7s 114us/step - loss: 0.1996 - acc: 0.9245 - val_loss: 0.2589 - val_acc: 0.9170
Epoch 4/5
60000/60000 [==============================] - 7s 114us/step - loss: 0.1615 - acc: 0.9388 - val_loss: 0.2988 - val_acc: 0.9090
Epoch 5/5
60000/60000 [==============================] - 7s 113us/step - loss: 0.1314 - acc: 0.9514 - val_loss: 0.2713 - val_acc: 0.9140

Out[4]:

<tensorflow.python.keras.callbacks.History at 0x7f32408dabe0>

 

基于test数据对模型进行评测

# 模型评测
test_loss, test_acc = model.evaluate(test_images, test_labels)

print('the model\'s test_loss is {} and test_acc is {}'.format(test_loss, test_acc))

#部分预测结果展示
show_images = test_images[:10]
print(show_images.shape)
predictions = model.predict(show_images)
predict_labels = np.argmax(predictions, 1)

plt.figure(figsize=(10,5)) #显示前10张图像,并在图像上显示类别
for i in range(10):
    plt.subplot(2,5,i+1)
    plt.grid(False)
    plt.imshow(show_images[i,:,:,0],cmap=plt.cm.binary)
    plt.title(class_names[predict_labels[i]])

plt.show()

 

 

 

 

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值