使用Sequential函数构造多层感知机(MLP)

一般来说可以用于网络构造的方式有多种,笔者认为使用Sequential函数构造网络比较简单,以此为例进行网络搭建

MLP:至少含有一个隐藏层的由全连接层组成的神经网络,且每个隐藏层的输出通过激活函数进行变换

实例

我们使用Sequential函数来实现构造一个MLP,我们设定我们所要构造的MLP是一个两层的网络,其中输入为X为800个元素,隐藏层有256个单元,输出为3个标签

 代码实现

接下来我们使用Sequential来构造该网络

import torch
import numpy as np
import torch
from torch import nn
import sys
import d2lzh_pytorch as d2l

#定义输入
X = torch.rand(2, 800)

#使用Sequntial函数实现MLP
class MySequential(nn.Module):
    from collections import OrderedDict
    def __init__(self, *args):
        super(MySequential, self).__init__()   #子承父类
        if len(args) == 1 and isinstance(args[0], OrderedDict): 
            for key, module in args[0].items():
                self.add_module(key, module) 
        else:  # 传入的是一些Module
            for idx, module in enumerate(args):
                self.add_module(str(idx), module)
    def forward(self, input):
        for module in self._modules.values():
            input = module(input)
        return input

#进行网络构建
net = MySequential(
        nn.Linear(800, 256),
        nn.ReLU(),  #使用激活函数
        nn.Linear(256, 3), 
        )
print(net)  #查看一下构造的网络的情况

net(X)  #运行网络

总结

以上就是一个很简单也很常见的使用Sequential来构造网络的方法,需要注意的是_init_函数的作用是定义模型参数,forward函数是实现前向传播,在使用该方法构造网络模型的时候,前向/反向传播需要自行单独定义

网络层数可以更具需求进行更改

net中的nn.ReLU是激活函数,常用的激活函数除了ReLU(线性整流函数)还有Sigmoid函数、tanh函数。

你可能感兴趣的:(深度学习,pytorch,mlp)