WA_automat

【深度学习】:多层感知机

N 人看过

可以在网络中加入一个或多个隐藏层来克服线性模型的限制,使其能处理更普遍的函数关系类型。(最简单的方法是将许多全连接层堆叠在一起)

为了防止多层感知机退化成线性的,我们可以对每个隐藏单元应用一个非线性的激活函数


激活函数)通过计算加权和并加上偏置来确定神经元是否应该被激活,它们将输⼊信号转换为输出的可微运算。

常见的激活函数有:函数,函数,函数

其中:

为使得某些负值属性也能够通过函数,该函数产生了许多变式,如:参数化函数):


下面给出一个多层感知机的简单实现,这里就只给出类定义了。

由三个全连接层实现,输入层有个结点,隐藏层分别有个隐藏结点,输出层有个结点

from torch import nn
import torch.nn.functional as F


class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(1024, 256)
        self.fc2 = nn.Linear(256, 64)
        self.fc3 = nn.Linear(64, 4)

    def forward(self, x):
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

防止过拟合的方法

  1. L2正则化(权重衰减):增加正则化系数
  2. 暂退法:在每一个全连接层后,增加dropout层

L2正则化本质是降低数据的方差以防止过拟合。

暂退法图解:
暂退法

本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 (CC BY-NC-ND 4.0) 进行许可。