from tensorflow import keras
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
fashion_mnist=keras.datasets.fashion_mnist
# 加载数据
# 训练的数据集 训练的label 测试的数据集 测试的label
(train_images,train_label),(test_images,test_label)=fashion_mnist.load_data()
# 输出训练图片的大小 图片数 图片长和宽的像素
# print(train_images.shape)
# 标签的张数
# print(train_label.shape)
# 输出前五个标签
# print(train_label[:5])
# plt.imshow(train_images[0]);
# 当出现过拟合的情况时,提前终止训练
class myCallback(tf.keras.callbacks.Callback):
def on_epoch_end(self,epoch,logs={}):
if(logs.get('loss')<0.4):
print('取消训练')
self.model.stop_training=True
callbacks=myCallback()
mnist=tf.keras.datasets.fashion_mnist
# 构造神经元网络模型 共有三层神经元网络
model=keras.Sequential([
# 指定输入的shape是28*28的 输入层
keras.layers.Flatten(input_shape=(28,28)),
# 中间层128个神经元 relu函数只有输入是正数的时候才有输出,输入是负数的时候没有输出
keras.layers.Dense(128,activation=tf.nn.relu),
# 分10类,具有10个神经元 输出层 softmax把输出压缩在0和1之间
keras.layers.Dense(10,activation=tf.nn.softmax)
])
# 使训练效果更好
train_images=train_images/255
# model.summary()
# tf.optimizers.Adam()函数用来做优化,大致意思是 将开始的学习率设置为一个较大的值,然后根据次数的增多,动态的减小学习率,以实现效率和效果的兼得。
# tf.losses.sparse_categorial_crossentropy 用来返回每个样本的损失
model.compile(optimizer=tf.keras.optimizers.Adam(),loss=tf.keras.losses.sparse_categorical_crossentropy,metrics=['accuracy'])
# 开始训练模型
model.fit(train_images,train_label,epochs=5)
#
# 测试训练模型准不准
test_images_scaled=test_images/255
model.evaluate(test_images_scaled,test_label)
# 利用单张图片判断模型是否准确
print(np.argmax(model.predict([[test_images[0]/255]])))
print(test_label[0])
plt.imshow(test_images[0])
根据网络上的图片,让机器自动学习如何识别衣服,裤子,靴子等物品
最终得到的结果对比为: