统计参数总数量
1 | num_params = sum(param.numel() for param in model.parameters()) |
划分训练集和验证集
1 | train_size = int(0.8 * len(full_dataset)) |
参数初始化
Xavier 初始化
Xavier初始化的基本思想是保持输入和输出的方差一致,这样就避免了所有输出值都趋向于0。这是通用的方法,适用于任何激活函数。
1 | for m in model.modules(): |
He 初始化
He 初始化的思想是:在ReLU网络中,假定每一层有一半的神经元被激活,另一半为0。推荐在ReLU网络中使用。
1 | for m in model.modules(): |
正则化
一般正则化,只是对模型的权重W
参数进行惩罚,而偏置b
是不进行惩罚的,如果对权值w
和偏置b
同时进行惩罚,将会导致严重的欠拟合。
L2 正则化
torch.optim
的优化器固定实现L2正则化,也只实现了L2正则化,若想实现L1正则化,见下。而torch.optim
的优化器weight_decay参数指定的权值衰减是对网络中的所有参数,包括 权值w
和 偏置b
同时进行惩罚,需要特意设置一下,只对 权值w
进行惩罚。
1 | weight_p, bias_p = [],[] |
另一种实现:
1 | reg = 1e-6 |
L1 正则化
1 | reg = 1e-6 |