上一篇blog介绍了MLP的详细实现,需要对原理有一个了解,这样才能根据自己的要求调整模型以满足自己的需求,比如隐藏层要几层,也就是深度要多深,每个隐藏层的神经元个数安排多少等等的问题,那么上一篇的实现方法稍显复杂,那么本文就将用框架实现MLP。
导包import torch from torch import nn from d2l import torch as d2l模型建立
这里可以回想一下softmax的简易实现,我们当时也用到了nn.Sequential,当时只有一层神经网络,也就是输入层直接全连接到输出层。那么上个blog我们用到了一层隐藏层,那么就有2层神经网络,输入层至隐藏层,隐藏层至输出层。
看nn.Sequential中的参数设置:
nn.Flatten():将28*28的矩阵降维
nn.Linear(784, 256):输入784神经元,输出至隐藏层256个神经元
nn.ReLU():使用激活函数Relu
nn.Linear(256, 10):输入256神经元,输出至输出层10个神经元
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)
net.apply(init_weights);
训练
这里和上篇blog一致
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)小结
MLP的框架实现使得神经网络的建立会方便很多,现在一共学了3个预测算法,可以解决的问题也越来愈多,慢慢学习,加油。



