在 PyTorch 中,可以通过给神经网络的权重(weight)和偏置(bias)设置一个固定的初始值来实现固定参数的功能。一种方法是在创建网络时手动设置权重和偏置,例如:
import torch.nn as nn class MyNet(nn.Module): def __init__(self): super(MyNet, self).__init__() # 设置全连接层权重和偏置的固定初始值 self.fc = nn.Linear(in_features=10, out_features=5) self.fc.weight.data.fill_(1.0) self.fc.bias.data.fill_(0.) # ... def forward(self, x): # ... return x
上述代码中,我们手动设置了一个全连接层的权重为 1,偏置为 0。需要注意的是,在使用 weight.data
和 bias.data
直接修改权重和偏置值时,PyTorch 不会自动计算这些参数的梯度,因此这些参数不会被更新。如果想要让这些参数参与到反向传播过程中,需要将其声明为可训练参数(trainable parameter),例如:
class MyNet(nn.Module): def __init__(self): super(MyNet, self).__init__() # 声明全连接层权重和偏置为可训练参数 self.fc = nn.Linear(in_features=10, out_features=5) self.fc.weight.data.fill_(1.0) self.fc.bias.data.fill_(0.) self.fc.weight.requires_grad = True self.fc.bias.requires_grad = True # ... def forward(self, x): # ... return x
在这里,我们通过 requires_grad
属性将权重和偏置设置为可训练参数。这样,这些参数的梯度就会被自动计算并参与到反向传播过程中。