欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

神经网络中Dropout的理解

程序员文章站 2022-07-13 10:08:14
...

在写代码过程中遇到这样一个问题,之前训练了一个模型,保存了权重,有过拟合的迹象,我便在神经网络的一些层加上Dropout进行部分丢弃,但是在重新加载模型进行预测时,出现了预测错的离谱现象,即使Dropout的丢失率设置为0,也错的离谱。

解答:Dropout(0)!=没有Dropout()层

原始的代码,训练保存权重 0.pth

net_dropped = torch.nn.Sequential(
    torch.nn.Linear(1, N_HIDDEN),
    torch.nn.ReLU(),
    torch.nn.Linear(N_HIDDEN, N_HIDDEN),
    torch.nn.ReLU(),
    torch.nn.Linear(N_HIDDEN, 1),
)

修改后的代码,加了Dropout层,即使将0.5改成0也不能等于原始的代码

net_dropped = torch.nn.Sequential(
    torch.nn.Linear(1, N_HIDDEN),
    torch.nn.Dropout(0.5),  # drop 50% of the neuron
    torch.nn.ReLU(),
    torch.nn.Linear(N_HIDDEN, N_HIDDEN),
    torch.nn.Dropout(0.5),  # drop 50% of the neuron
    torch.nn.ReLU(),
    torch.nn.Linear(N_HIDDEN, 1),
)