丢弃法的 Gluon 实现

本节中,我们将上一节的实验代码用 Gluon 实现一遍。你会发现代码将精简很多。

定义模型并添加丢弃层

在多层感知机中 Gluon 实现的基础上,我们只需要在全连接层后添加 Dropout 层并指定丢弃概率。在训练模型时,Dropout 层将以指定的丢弃概率随机丢弃上一层的输出元素;在测试模型时,Dropout 层并不发挥作用。

In [1]:
import sys
sys.path.append('..')
import gluonbook as gb
from mxnet import autograd, gluon, init, nd
from mxnet.gluon import loss as gloss, nn

drop_prob1 = 0.2
drop_prob2 = 0.5

net = nn.Sequential()
net.add(nn.Flatten())
net.add(nn.Dense(256, activation="relu"))
# 在第一个全连接层后添加丢弃层。
net.add(nn.Dropout(drop_prob1))
net.add(nn.Dense(256, activation="relu"))
# 在第二个全连接层后添加丢弃层。
net.add(nn.Dropout(drop_prob2))
net.add(nn.Dense(10))
net.initialize(init.Normal(sigma=0.01))

训练和测试模型

这部分依然和多层感知机中的训练和测试没有多少区别。

In [2]:
num_epochs = 5
batch_size = 256
loss = gloss.SoftmaxCrossEntropyLoss()
trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': 0.5})
train_iter, test_iter = gb.load_data_fashion_mnist(batch_size)
gb.train_ch3(net, train_iter, test_iter, loss, num_epochs, batch_size,
             None, None, trainer)
epoch 1, loss 1.1511, train acc 0.555, test acc 0.778
epoch 2, loss 0.5811, train acc 0.785, test acc 0.818
epoch 3, loss 0.4880, train acc 0.822, test acc 0.838
epoch 4, loss 0.4434, train acc 0.837, test acc 0.856
epoch 5, loss 0.4191, train acc 0.848, test acc 0.857

小结

  • 使用 Gluon,我们可以更方便地构造多层神经网络并使用丢弃法。

练习

  • 尝试不同丢弃概率超参数组合,观察并分析结果。

扫码直达 讨论区