dropout层的添加,L2正则化

dropout 一般添加在线性层,要给某一线性层添加dropout,dropout函数一般写在此线性层的前面。

注意:最后一个线性层前面一般不加dropout,一般线性层和激活函数搭配

import torch
from torch import nn
 
self.linears = nn.Sequential(
    nn.Linear(1, neural num), 
    nn.ReLU(inplace=True),

    nn.Dropout(p=0.5),
    nn.Linear(neural_num, neural_num), 
    nn.ReLU(inplace=True),
    #此三行为一组,Dropout写在对应线性层的前面


    nn.Dropout(p=0.5), #有人说一般不加,但也可以加
    nn.Linear(neural num, 1)
    #最后一个线性层一般不加Dropout    
        )

L2正则化:

net_normal = Net(neural_num=n_hidden)  
net_weight_decay = Net(neural_num=n_hidden)
 
optimizer = torch.optim.SGD(net_normal.parameters(), lr=lr_init, momentum=0.9)

optimizer = torch.optim.SGD(net_weight_decay.parameters(), lr=lr_init, momentum=0.9, weight_decay=1e-2)

仅仅只是优化器中多加此参数代表使用了L2正则化。weight_decay=1e-2


同济自豪兄好像把dropout写在了此线性层的后面

原始的:

加上激活函数后的: 

 

 另一种加dropout: