from tensorflow import keras from tensorflow.keras import layers import tensorflow as tf import numpy as np import matplotlib.pyplot as plt %matplotlib inline

加载fashion_mnist数据集

1
2
fashion_mnist = keras.datasets.fashion_mnist
(train_images,train_labels),(test_images,test_labels) = fashion_mnist.load_data()

维度扩增

1
2
train_images = np.expand_dims(train_images,-1)#扩张维度 -1表示扩增最后一个维度
test_images = np.expand_dims(test_images,-1)

模型搭建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
model = tf.keras.Sequential()#顺序模型
model.add(tf.keras.layers.Conv2D(64,(3,3),
input_shape=train_images.shape[1:],#(10000, 28, 28, 1)除去第一个个数值
activation='relu',
padding='same' ))#卷积层对图像的特征提取能力强,32个卷积核,生成32个通道,3,3表示3x3的卷积核
model.add(tf.keras.layers.Conv2D(64,(3,3),
activation='relu',
padding='same'))
model.add(tf.keras.layers.MaxPool2D())
model.add(tf.keras.layers.Dropout(0.5))

model.add(tf.keras.layers.Conv2D(128,(3,3),
activation='relu',
padding='same'))
model.add(tf.keras.layers.Conv2D(128,(3,3),
activation='relu',
padding='same'))
model.add(tf.keras.layers.MaxPool2D())
model.add(tf.keras.layers.Dropout(0.5))

model.add(tf.keras.layers.Conv2D(256,(3,3),
activation='relu',
padding='same'))
model.add(tf.keras.layers.Conv2D(256,(3,3),
activation='relu',
padding='same'))
model.add(tf.keras.layers.MaxPool2D())
model.add(tf.keras.layers.Dropout(0.5))

model.add(tf.keras.layers.Conv2D(512,(3,3),
activation='relu',
padding='same'))
model.add(tf.keras.layers.Conv2D(512,(3,3),
activation='relu',
padding='same'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.GlobalAveragePooling2D())#全局平均池化
model.add(tf.keras.layers.Dense(256,activation='relu'))
model.add(tf.keras.layers.Dense(10,activation='softmax'))

模型优化函数等设置

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

模型训练

1
2
3
4
history = model.fit(train_images,
train_labels,
epochs=50,
validation_data=(test_images,test_labels))

训练acc、loss数据可视化

1
history.history.keys()
1
2
plt.plot(history.epoch,history.history.get('acc'),label='acc')
plt.plot(history.epoch,history.history.get('val_acc'),label='val_acc')

1
2
plt.plot(history.epoch,history.history.get('loss'),label='locc')
plt.plot(history.epoch,history.history.get('val_loss'),label='val_loss')