Fashion MNIST图像识别(tf.data实现)

概述

本文用tf.data api重新实现fashion图像识别

加载数据

# 加载数据
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np

(train_image,train_label),(test_image,test_label)=tf.keras.datasets.fashion_mnist.load_data()

图像数据 归一化

# 归一化

train_image=train_image/255
test_image=test_image/255

将训练集转成dataset对象

ds_train=tf.data.Dataset.from_tensor_slices((train_image,train_label))
ds_train

注意: 传入的是元祖

执行结果如下:

<TensorSliceDataset shapes: ((28, 28), ()), types: (tf.float64, tf.uint8)>

由于做了归一化,所以图像类型是float64

label是无符号整型

对训练集进行处理

打乱顺序
ds_train=ds_train.shuffle(10000)

将10000个数据进行打乱顺序

无限重复
ds_train=ds_train.repeat()

无限次

批量读取
ds_train=ds_train.batch(64)

每次输入64张图像和label

将测试集转成Dataset对象

ds_test=tf.data.Dataset.from_tensor_slices((test_image,test_label))

ds_test

执行结果如下:

<RepeatDataset shapes: ((None, 28, 28), (None,)), types: (tf.float64, tf.uint8)>

对测试集进行处理

无限重复
ds_test=ds_test.repeat()
批量读取
ds_test=ds_test.batch(64)

建立模型

# 建立模型

model=tf.keras.Sequential()

# 线性回归中是一维数据,而图像数据是二维数据,需要将二维数据转换成一维数据
model.add(tf.keras.layers.Flatten(input_shape=(28,28)))
# 数量不能太少,会欠拟合,也不能太多,会过拟合
model.add(tf.keras.layers.Dense(128,activation='relu'))
# 10个分类,softmax的作用就是将10个输出值变成概率值,这些概率值之和为1
model.add(tf.keras.layers.Dense(10,activation='softmax'))

model.summary()

配置训练模型

model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['acc'])

计算训练集执行多少次算一个循环

由于上面的数据是无限循环,所以要告知执行多少次是一次循环
图像形状的第一个是图像数量,除以每次读入的64个图像,就是执行的次数

num=train_image.shape[0]//64
num

计算测试集执行多少次算一个循环

num_vld_stps=test_image.shape[0]//64
num_vld_stps

开始训练

model.fit(ds_train,epochs=5,steps_per_epoch=num,validation_data=ds_test,validation_steps=num_vld_stps)

执行结果:

Epoch 1/5
937/937 [==============================] - 6s 6ms/step - loss: 0.3785 - accuracy: 0.8656 - val_loss: 0.4190 - val_accuracy: 0.8502
Epoch 2/5
937/937 [==============================] - 5s 6ms/step - loss: 0.3761 - accuracy: 0.8670 - val_loss: 0.4172 - val_accuracy: 0.8499
Epoch 3/5
937/937 [==============================] - 5s 5ms/step - loss: 0.3731 - accuracy: 0.8672 - val_loss: 0.4160 - val_accuracy: 0.8521
Epoch 4/5
937/937 [==============================] - 5s 5ms/step - loss: 0.3712 - accuracy: 0.8693 - val_loss: 0.4130 - val_accuracy: 0.8545
Epoch 5/5
937/937 [==============================] - 5s 5ms/step - loss: 0.3684 - accuracy: 0.8698 - val_loss: 0.4111 - val_accuracy: 0.8534
<tensorflow.python.keras.callbacks.History at 0xd5021d8fd0>

后续代码

后续代码与之前例子完全一样


原文出处:/show_1EF47rSHdidH.html