Dropout抑制过拟合(代码实现)

概述

本文通过代码感受 Dropout抑制过拟合

tf.keras.layers.Dropout api参见:
https://www.malaoshi.top/show_1EF48s9XYqUL.html

关键代码

添加Dropout层

model.add(tf.keras.layers.Flatten(input_shape=(28,28)))
model.add(tf.keras.layers.Dense(128,activation='relu'))
#增加Dropout层
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(128,activation='relu'))
#增加Dropout层
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(128,activation='relu'))
#增加Dropout层
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(10,activation='softmax'))

代码

# 加载数据
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np

(train_image,train_label),(test_image,test_label)=tf.keras.datasets.fashion_mnist.load_data()

归一化

train_image=train_image/255
test_image=test_image/255

独热编码

train_label_onehot=tf.keras.utils.to_categorical(train_label)

test_label_onehot=tf.keras.utils.to_categorical(test_label)

建立模型

model=tf.keras.Sequential()

# 线性回归中是一维数据,而图像数据是二维数据,需要将二维数据转换成一维数据
model.add(tf.keras.layers.Flatten(input_shape=(28,28)))
model.add(tf.keras.layers.Dense(128,activation='relu'))
#增加Dropout层
# model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(128,activation='relu'))
#增加Dropout层
# model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(128,activation='relu'))
#增加Dropout层
# model.add(tf.keras.layers.Dropout(0.5))
# 10个分类,softmax的作用就是将10个输出值变成概率值,这些概率值之和为1
model.add(tf.keras.layers.Dense(10,activation='softmax'))

model.summary()

配置

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

开始训练

history=model.fit(train_image,train_label_onehot,epochs=5,validation_data=(test_image,test_label_onehot))

显示损失值图像

history.history.get('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.show()

执行结果如下:

损失值一直在下降

显示正确率图像

plt.plot(history.epoch,history.history.get('acc'),label='acc')
plt.plot(history.epoch,history.history.get('val_acc'),label='val_acc')
plt.legend()
plt.show()

执行结果如下:

正确率一直上升


原文出处:/show_1EF48swScTp6.html