Fashion MNIST 数据集分类训练优化1

对于上集演示的Fashion MNIST 数据集分类训练,接着对其进行优化

1、优化其实无非就是增加其网络容量

增加隐藏层或者增加层里的单元。

2、关于用到Dropout抑制过拟合

(1)说明

之前看过宫廷剧:“后宫佳妃三千,皇上要雨露均沾”,为了防止甄嬛独受宠,要随机掐掉一些激活机会

类似随机森林的思想。深度学习的过拟合已经解决,不是接下来需要研究的内容,这里主要用流行的Dropout。

(2)代码,模型更改

接着上一章,更改模型

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))     #丢弃50%随机的
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'))
model.summary()

model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
              loss='sparse_categorical_crossentropy',  
              metrics=['acc']
)

history = model.fit(train_image, train_lable, epochs=10, 
                    validation_data=(test_image, test_label))

history.history.keys()
#画loss损失函数的图
plt.plot(history.epoch, history.history.get('loss'),label='loss')
plt.plot(history.epoch, history.history.get('val_loss'),label='val_loss')
plt.legend()
#画准确率的图
plt.plot(history.epoch, history.history.get('acc'),label='acc')
plt.plot(history.epoch, history.history.get('val_acc'),label='val_acc')
plt.legend()

(3)运行结果:

 分析:

测试集的loss和训练集的loss一样在下降,就是很好的。

如果训练集的loss在下降,而测试集的loss反而不下降,就是典型的过拟合问题。

 同理:

测试集的准确率acc和训练集的acc一样在上升,就是很好的。

如果训练集的acc在上升,而测试集的acc反而下降,就是典型的过拟合问题。

其实防止过拟合最好的最根本的办法就是

1、增加数据集,数据集足够的时候不会有过拟合问题。这里用Dropout也是数据集有限而已。

2、或者减小网络容量也是一个方法。

猜你喜欢

转载自blog.csdn.net/m0_63172128/article/details/124348757