FASHION_MNIST数据集
博主微信公众号(左)、Python+智能大数据+AI学习交流群(右):欢迎关注和加群,大家一起学习交流,共同进步!
目录
七、打印出训练集(输入特征、标签)、测试集(输入特征、标签)的形状
摘要
FASHION_MNIST 数据集(具有mnist近乎所有的特征):
提供 6w 张 28*28 像素点的衣裤等图片和标签,用于训练。
提供 1w 张 28*28 像素点的衣裤等图片个标签,用于测试。
类别如下所示:
图片示例如下所示:
一、导入模块
# 模块导入
import tensorflow as tf
from matplotlib import pyplot as plt
二、导入 FASHION_MNIST 数据集
# 导入数据集,分别为输入特征和标签
fashion_mnist = tf.keras.datasets.fashion_mnist
# (x_train, y_train):(训练集输入特征,训练集标签)
# (x_test, y_test):(测试集输入特征,测试集标签)
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
三、作为输入特征,输入神经网络时,将数据拉伸为一维数组
tf.keras.layers.Flatten() # 将输入特征拉直为一维数组,也就是拉直为28*28=784个数值
把28*28=784个像素点的灰度值作为输入特征送入神经网络。
四、可视化训练集输入特征的第一个元素
# 可视化训练集输入特征的第一个元素
plt.imshow(x_train[0], cmap="gray") # 绘制灰度图
plt.show()
可视化后的图片:一张黑底白字的鞋子图片。
五、打印出训练集输入特征的第一个元素
# 打印出训练集输入特征的第一个元素
print(f"x_train[0]: \n {x_train[0]}")
输出结果:手写数字5的28行28列个像素值。0表示纯黑色,255表示纯白色。
x_train[0]:
[[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 13 73 0
0 1 4 0 0 0 0 1 1 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 3 0 36 136 127 62
54 0 0 0 1 3 4 0 0 3]
[ 0 0 0 0 0 0 0 0 0 0 0 0 6 0 102 204 176 134
144 123 23 0 0 0 0 12 10 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 155 236 207 178
107 156 161 109 64 23 77 130 72 15]
[ 0 0 0 0 0 0 0 0 0 0 0 1 0 69 207 223 218 216
216 163 127 121 122 146 141 88 172 66]
[ 0 0 0 0 0 0 0 0 0 1 1 1 0 200 232 232 233 229
223 223 215 213 164 127 123 196 229 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 183 225 216 223 228
235 227 224 222 224 221 223 245 173 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 193 228 218 213 198
180 212 210 211 213 223 220 243 202 0]
[ 0 0 0 0 0 0 0 0 0 1 3 0 12 219 220 212 218 192
169 227 208 218 224 212 226 197 209 52]
[ 0 0 0 0 0 0 0 0 0 0 6 0 99 244 222 220 218 203
198 221 215 213 222 220 245 119 167 56]
[ 0 0 0 0 0 0 0 0 0 4 0 0 55 236 228 230 228 240
232 213 218 223 234 217 217 209 92 0]
[ 0 0 1 4 6 7 2 0 0 0 0 0 237 226 217 223 222 219
222 221 216 223 229 215 218 255 77 0]
[ 0 3 0 0 0 0 0 0 0 62 145 204 228 207 213 221 218 208
211 218 224 223 219 215 224 244 159 0]
[ 0 0 0 0 18 44 82 107 189 228 220 222 217 226 200 205 211 230
224 234 176 188 250 248 233 238 215 0]
[ 0 57 187 208 224 221 224 208 204 214 208 209 200 159 245 193 206 223
255 255 221 234 221 211 220 232 246 0]
[ 3 202 228 224 221 211 211 214 205 205 205 220 240 80 150 255 229 221
188 154 191 210 204 209 222 228 225 0]
[ 98 233 198 210 222 229 229 234 249 220 194 215 217 241 65 73 106 117
168 219 221 215 217 223 223 224 229 29]
[ 75 204 212 204 193 205 211 225 216 185 197 206 198 213 240 195 227 245
239 223 218 212 209 222 220 221 230 67]
[ 48 203 183 194 213 197 185 190 194 192 202 214 219 221 220 236 225 216
199 206 186 181 177 172 181 205 206 115]
[ 0 122 219 193 179 171 183 196 204 210 213 207 211 210 200 196 194 191
195 191 198 192 176 156 167 177 210 92]
[ 0 0 74 189 212 191 175 172 175 181 185 188 189 188 193 198 204 209
210 210 211 188 188 194 192 216 170 0]
[ 2 0 0 0 66 200 222 237 239 242 246 243 244 221 220 193 191 179
182 182 181 176 166 168 99 58 0 0]
[ 0 0 0 0 0 0 0 40 61 44 72 41 35 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0]]
六、打印出训练集标签的第一个元素
# 打印出训练集标签的第一个元素
print(f"y_train[0]: \n {y_train[0]}")
输出结果:
y_train[0]:
9
七、打印出训练集(输入特征、标签)、测试集(输入特征、标签)的形状
# 打印出整个训练集输入特征的形状
print(f"x_train.shape: \n {x_train.shape}")
# 打印出整个训练集标签的形状
print(f"y_train.shape: \n {y_train.shape}")
# 打印出整个测试集输入特征的形状
print(f"x_test.shape: \n {x_test.shape}")
# 打印出整个测试集标签的形状
print(f"y_test.shape: \n {y_test.shape}")
输出结果:
x_train —— 60000 个 28 行 28 列的数据
y_train —— 60000 个标签
x_test —— 10000 个 28 行 28 列的数据
y_test —— 10000 个标签
x_train.shape:
(60000, 28, 28)
y_train.shape:
(60000,)
x_test.shape:
(10000, 28, 28)
y_test.shape:
(10000,)
八、完整代码
# 模块导入
import tensorflow as tf
from matplotlib import pyplot as plt
# 导入数据集,分别为输入特征和标签
fashion_mnist = tf.keras.datasets.fashion_mnist
# (x_train, y_train):(训练集输入特征,训练集标签)
# (x_test, y_test):(测试集输入特征,测试集标签)
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
# 可视化训练集输入特征的第一个元素
plt.imshow(x_train[0], cmap="gray") # 绘制灰度图
plt.show()
# 打印出训练集输入特征的第一个元素
print(f"x_train[0]: \n{x_train[0]}")
# 打印出训练集标签的第一个元素
print(f"y_train[0]: \n {y_train[0]}")
# 打印出整个训练集输入特征的形状
print(f"x_train.shape: \n {x_train.shape}")
# 打印出整个训练集标签的形状
print(f"y_train.shape: \n {y_train.shape}")
# 打印出整个测试集输入特征的形状
print(f"x_test.shape: \n {x_test.shape}")
# 打印出整个测试集标签的形状
print(f"y_test.shape: \n {y_test.shape}")
九、Sequential() 实现手写数字识别
# 模块导入
import tensorflow as tf
# 导入数据集,分别为输入特征和标签
fashion_mnist = tf.keras.datasets.fashion_mnist
# (x_train, y_train):(训练集输入特征,训练集标签)
# (x_test, y_test):(测试集输入特征,测试集标签)
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
# 对输入网络的输入特征进行归一化,使原本0到255之间的灰度值,变为0到1之间的数值
# (把输入特征的数值变小更适合神经网络吸收)
x_train, x_test = x_train / 255.0, x_test / 255.0
# 搭建网络结构
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(), # 将输入特征拉直为一维数组,也就是拉直为28*28=784个数值
tf.keras.layers.Dense(128, activation="relu"), # 第一层网络128个神经元,使用relu激活函数
tf.keras.layers.Dense(10, activation="softmax") # 第二层网络10个神经元,使用softmax激活函数,使输出符合概率分布
])
# 配置训练方法
model.compile(optimizer="adam", # 优化器
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), # 损失函数,输出是概率分布,from_logits=False
metrics=["sparse_categorical_accuracy"]) # 数据集中的标签是数值,神经网络输出y是概率分布
# 执行训练过程
model.fit(x_train, # 训练集输入特征
y_train, # 训练集标签
batch_size=32, # 每次喂入网络32组数据
epochs=5, # 数据集迭代5次
validation_data=(x_test, y_test), # 测试集输入特征,测试集标签
validation_freq=1) # 每迭代1次训练集执行一次测试集的评测
# 打印出网络结构和参数统计
model.summary()
十、Class() 实现手写数字识别
# 模块导入
import tensorflow as tf
from tensorflow.keras import Model
from tensorflow.keras.layers import Dense, Flatten
# 导入数据集,分别为输入特征和标签
fashion_mnist = tf.keras.datasets.fashion_mnist
# (x_train, y_train):(训练集输入特征,训练集标签)
# (x_test, y_test):(测试集输入特征,测试集标签)
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
# 对输入网络的输入特征进行归一化,使原本0到255之间的灰度值,变为0到1之间的数值
# (把输入特征的数值变小更适合神经网络吸收)
x_train, x_test = x_train / 255.0, x_test / 255.0
# 搭建网络结构
class FashionMnistModel(Model):
def __init__(self):
super(FashionMnistModel, self).__init__()
self.flatten = Flatten() # 将输入特征拉直为一维数组,也就是拉直为28*28=784个数值
self.d1 = Dense(128, activation="relu") # 第一层网络128个神经元,使用relu激活函数
self.d2 = Dense(10, activation="softmax") # 第二层网络10个神经元,使用softmax激活函数,使输出符合概率分布
def call(self, x):
x = self.flatten(x)
x = self.d1(x)
y = self.d2(x)
return y
model = FashionMnistModel()
# 配置训练方法
model.compile(optimizer="adam", # 优化器
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), # 损失函数,输出是概率分布,from_logits=False
metrics=["sparse_categorical_accuracy"]) # 数据集中的标签是数值,神经网络输出y是概率分布
# 执行训练过程
model.fit(x_train, # 训练集输入特征
y_train, # 训练集标签
batch_size=32, # 每次喂入网络32组数据
epochs=5, # 数据集迭代5次
validation_data=(x_test, y_test), # 测试集输入特征,测试集标签
validation_freq=1) # 每迭代1次训练集执行一次测试集的评测
# 打印出网络结构和参数统计
model.summary()