回到首页

TensorFlow fashion-mnist图像分类应用实践

代码如下

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

# 加载数据
fashion_mnist=tf.keras.datasets.fashion_mnist
(train_images,train_labels),(test_images,test_labels)=fashion_mnist.load_data()

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

# 数据可视化
# plt.figure()
# plt.imshow(train_images[0])
# plt.colorbar()
# plt.grid(False)
# plt.show()

# 数据预处理
train_images=train_images/255.0
test_images=test_images/255.0

# 数据和标签可视化
# plt.figure(figsize=(10,10))
# for i in range(25):
# 	plt.subplot(5,5,i+1)
# 	plt.xticks([])
# 	plt.yticks([])
# 	plt.grid(False)
# 	plt.imshow(train_images[i],cmap=plt.cm.binary)
# 	plt.xlabel(class_names[train_labels[i]])
# plt.show()

# 构建模型
model=tf.keras.Sequential([
		tf.keras.layers.Flatten(input_shape=(28,28)),
		tf.keras.layers.Dense(128,activation='relu'),
		tf.keras.layers.Dense(10)
	])
# 训练模型
# model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])
# model.fit(train_images,train_labels,epochs=10)
# test_loss,test_acc=model.evaluate(test_images,test_labels,verbose=2)
# print('\nTest accuracy:',test_acc)
probability_model=tf.keras.Sequential([model,tf.keras.layers.Softmax()])
# predictions=probability_model.predict(test_images)
# class_names[np.argmax(predictions[0])]

# 数据预测可视化
def plot_image(i,predictions_array,true_label,img):
	true_label,img=true_label[i],img[i]
	plt.grid(False)
	plt.xticks([])
	plt.yticks([])
	plt.imshow(img,cmap=plt.cm.binary)
	predicted_label=np.argmax(predictions_array)
	if predicted_label==true_label:
		color='blue'
	else:
		color='red'
	plt.xlabel('{} {:2.0f}% ({})'.format(class_names[predicted_label],100*np.max(predictions_array),class_names[true_label]),color=color)

def plot_value_array(i,predictions_array,true_label):
	true_label=true_label[i]
	plt.grid(False)
	plt.xticks(range(10))
	plt.yticks([])
	thisplot=plt.bar(range(10),predictions_array,color='#777777')
	plt.ylim([0,1])
	predicted_label=np.argmax(predictions_array)
	thisplot[predicted_label].set_color('red')
	thisplot[true_label].set_color('blue')

# 保存模型
# probability_model.save_weights('fashion_mnist.h5')
# 加载模型
probability_model.load_weights('fashion_mnist.h5')
# 预测结果
predictions=probability_model.predict(test_images)

# 可视化某张图像的预测结果
def verify_predictions(i,predictions,test_labels,test_images):
	plt.figure(figsize=(6,3))
	plt.subplot(1,2,1)
	plot_image(i,predictions[i],test_labels,test_images)
	plt.subplot(1,2,2)
	plot_value_array(i,predictions[i],test_labels)
	plt.show()

ls=[0,27]
for i in ls:
	verify_predictions(i,predictions,test_labels,test_images)
,来自Basic classification: Classify images of clothing

本文创建于2022.10.4/19.24,修改于2022.10.4/19.24