作用: 在输入层与输出层之间添加隐藏层,并通过激活函数后输出,使网络可以学习复杂的非线性映射

多层感知机的简洁实现

导入torch

import torch
from torch import nn

与之前一样,创建神经网络
这里增加了一个Linear全连接层,和ReLU激活函数

net = nn.Sequential(nn.Flatten(),
                    nn.Linear(784, 256),
                    nn.ReLU(),
                    nn.Linear(256, 10))
# 定义权重并应用
def init_weights(m):
    if type(m) == nn.Linear:
        nn.init.normal_(m.weight, std=0.01)# 均值mean默认0.标准差0.01
 
net.apply(init_weights);

与之前使用SoftMax进行图像分类相同的实现

batch_size, lr, num_epochs = 256, 0.1, 10 # 设置批量大小,学习率,轮数
loss = nn.CrossEntropyLoss(reduction='none') # 使用交叉熵损失
trainer = torch.optim.SGD(net.parameters(), lr=lr) # 使用梯度下降训练
 
train_iter,test_iter =d2l.load_data_fashion_mnist(batch_size)# 迭代获取数据
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)# 训练