首先之前的文章记录了MNIST简单的分类玩法。目前这个以及没有挑战性,作为它的代替者Fashion MNIST 。我们当然要玩一玩了
它长这样,同样有10类。和MNIST分类图片大小张数都一样
实现代码:本人用jupyter。上篇博文发的安装的tf2.6.0环境下写的
import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#首先导入所需包
#加载数据集,这里可以自己引入,不需要下载,为了速度快,可以下载好几个文件,放到对应jupyter存放文件位置,本人放的看下面图,文件评论里有分享
(train_image, train_lable), (test_image, test_label) = tf.keras.datasets.fashion_mnist.load_data()
#下面不是必须的,这个是看看数据集里内容
train_image.shape,train_lable.shape,test_image.shape, test_label.shape
plt.imshow(train_image[1])
#接下来归一化
train_image = train_image/255
test_image = test_image/255 #归一化
#创建模型,此部分可以根据自己增加层数等搞复杂点
model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28,28)))
# 28*28 拉平
model.add(tf.keras.layers.Dense(128, activation='relu'))
# 128个隐藏层单元个数,太大容易过拟合,太小容易遗漏信息
model.add(tf.keras.layers.Dense(10, activation='softmax'))
#输出层,10个概率
model.summary()
'''
model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28,28))) # 28*28
model.add(tf.keras.layers.Dense(128, activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(128, activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(128, activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(10, activation='softmax'))
'''
#最后选择优化器adam,损失函数
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['acc']
)
#开始训练,这个我用epochs=5。50的时候可以达到96%多
model.fit(train_image, train_lable, epochs=5)
数据集有60000张28*28的训练集,和10000张测试集
取出训练集的第二张看看是这个样子
模型内容这样:
加了隐藏层模型内容这样:
5个epochs时准去率acc=89.18%
50个epochs时准去率acc=96.76%
附加:完整干净的百分之96.75的简单的代码
import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
(train_image, train_lable), (test_image, test_label) = tf.keras.datasets.fashion_mnist.load_data()
train_image = train_image/255
test_image = test_image/255 #归一化
model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28,28))) # 28*28 拉平
model.add(tf.keras.layers.Dense(128, activation='relu')) # 128个隐藏层单元个数
model.add(tf.keras.layers.Dense(10, activation='softmax'))#输出层,10个概率
model.summary()
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['acc']
)
model.fit(train_image, train_lable, epochs=50)