3.10. 多层感知机的简洁实现
下面我们使用Gluon来实现上一节中的多层感知机。首先导入所需的包或模块。
- In [1]:
- import d2lzh as d2l
- from mxnet import gluon, init
- from mxnet.gluon import loss as gloss, nn
3.10.1. 定义模型
和softmax回归唯一的不同在于,我们多加了一个全连接层作为隐藏层。它的隐藏单元个数为256,并使用ReLU函数作为激活函数。
- In [2]:
- net = nn.Sequential()
- net.add(nn.Dense(256, activation='relu'),
- nn.Dense(10))
- net.initialize(init.Normal(sigma=0.01))
3.10.2. 读取数据并训练模型
我们使用与“softmax回归的简洁实现”一节中训练softmax回归几乎相同的步骤来读取数据并训练模型。
- In [3]:
- batch_size = 256
- train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
- loss = gloss.SoftmaxCrossEntropyLoss()
- trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': 0.5})
- num_epochs = 5
- d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, batch_size, None,
- None, trainer)
- epoch 1, loss 0.8161, train acc 0.699, test acc 0.810
- epoch 2, loss 0.4860, train acc 0.818, test acc 0.823
- epoch 3, loss 0.4301, train acc 0.841, test acc 0.861
- epoch 4, loss 0.3942, train acc 0.853, test acc 0.860
- epoch 5, loss 0.3683, train acc 0.865, test acc 0.862
3.10.3. 小结
- 通过Gluon可以更简洁地实现多层感知机。
3.10.4. 练习
- 尝试多加入几个隐藏层,对比上一节中从零开始的实现。
- 使用其他的激活函数,看看对结果的影响。