#!/usr/bin/env python # coding: utf-8 # # 多层感知机的简洁实现 # # 下面我们使用nn来实现上一节中的多层感知机。首先导入所需的包或模块。 # In[1]: import d2ltorch as d2lt import torch from torch import nn, optim # ## 定义模型 # # 和softmax回归唯一的不同在于,我们多加了一个全连接层作为隐藏层。它的隐藏单元个数为256,并使用ReLU函数作为激活函数。 # In[2]: class MyMLP(nn.Module): def __init__(self, **kwargs): super(MyMLP, self).__init__(**kwargs) self.mlp = nn.Sequential( nn.Linear(28 * 28, 256), nn.ReLU(), nn.Linear(256, 10) ) def forward(self, x): return self.mlp(x.reshape(-1, 28*28)) net = MyMLP() d2lt.params_init(net, nn.init.normal_, std=0.01) # ## 读取数据并训练模型 # # 我们使用与[“softmax回归的简洁实现”](softmax-regression-gluon.ipynb)一节中训练softmax回归几乎相同的步骤来读取数据并训练模型。 # In[3]: root = '~/dataset/' batch_size = 256 train_iter, test_iter = d2lt.load_data_fashion_mnist(root, batch_size=batch_size) loss = nn.CrossEntropyLoss() optimizer = optim.SGD(net.parameters(), lr=0.5) num_epochs = 5 d2lt.train_ch3(net, train_iter, test_iter, loss, num_epochs, batch_size, None, None, optimizer) # ## 小结 # # * 通过PyTorch可以更简洁地实现多层感知机。 # # ## 练习 # # * 尝试多加入几个隐藏层,对比上一节中从零开始的实现。 # * 使用其他的激活函数,看看对结果的影响。 # # # # ## 扫码直达[讨论区](https://discuss.gluon.ai/t/topic/738) # # ![](../img/qr_mlp-gluon.svg)