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: