在PyTorch中,对MNIST分类任务进行权重初始化,可以使用以下方法:
torch.nn.init
模块中的预定义函数。例如,使用Xavier初始化(也称为Glorot初始化)或He初始化。这些初始化方法有助于在训练初期加速收敛。import torch.nn as nn
import torch.nn.init as init
def initialize_weights(model):
for m in model.modules():
if isinstance(m, nn.Linear):
init.xavier_uniform_(m.weight)
init.zeros_(m.bias)
elif isinstance(m, nn.Conv2d):
init.kaiming_uniform_(m.weight, nonlinearity='relu')
init.zeros_(m.bias)
torch.nn.init
模块中的normal_
函数,并设置std
参数。例如,可以设置权重标准差为0.05。def initialize_weights(model):
for m in model.modules():
if isinstance(m, nn.Linear):
init.normal_(m.weight, mean=0, std=0.05)
init.zeros_(m.bias)
elif isinstance(m, nn.Conv2d):
init.normal_(m.weight, mean=0, std=0.05)
init.zeros_(m.bias)
def initialize_weights(model):
for m in model.modules():
if isinstance(m, nn.Linear):
# 自定义线性层权重初始化
init.uniform_(m.weight, -1, 1)
init.zeros_(m.bias)
elif isinstance(m, nn.Conv2d):
# 自定义卷积层权重初始化
init.kaiming_uniform_(m.weight, nonlinearity='relu')
init.zeros_(m.bias)
在定义好权重初始化函数后,可以在创建模型实例后调用该函数,以确保权重被正确初始化。
model = nn.Sequential(
nn.Linear(28 * 28, 128),
nn.ReLU(),
nn.Linear(128, 64),
nn.ReLU(),
nn.Linear(64, 10)
)
initialize_weights(model)