本文共 1194 字,大约阅读时间需要 3 分钟。
PyTorch中的自定义权重初始化
在PyTorch中自定义权重初始化是一个非常有用的操作,尤其是在训练过程中需要解决模型方差过大或欠拟合等问题时。以下是详细的实现步骤:
import torchfrom torch import nn
def custom_init(tensor): # 使用正态分布初始化 nn.init.normal_(tensor, mean=0, std=0.01) # 或者使用均匀分布初始化 # nn.init.uniform_(tensor, a=-bound, b=bound) # 偏置项初始化为零 if tensor.dim() > 1: nn.init.zeros_(tensor[:,0])
class MyNet(nn.Module): def __init__(self): super().__init__() self.fc = nn.Linear(input_size, output_size) def forward(self, x): return self.fc(x)
my_net = MyNet()for param in my_net.parameters(): if len(param.shape) > 1: custom_init(param)
input = torch.randn(10, input_size)output = my_net(input)print("Output shape:", output.shape) if rank == 0: for param in MyNet.parameters(): custom_init(param)else: for param in MyNet.parameters(): nn.init.zeros_(param) distributed_model = DistributedDataParallel(MyNet, device_ids=[rank])
转载地址:http://bqxfk.baihongyu.com/