PyTorch中手动配置权重、偏置与激活函数的代码修正求助
修正后的PyTorch神经网络代码
问题根源
原代码存在三个核心错误:
- 未调用自定义权重初始化函数,网络使用默认随机权重
nn.Linear默认自带偏置,未禁用导致偏置被重复添加- 权重维度填写错误,且前向传播中激活函数与偏置的顺序不符合预期计算逻辑
修正后的代码
import torch import torch.nn as nn class NeuralNet(nn.Module): def __init__(self): super().__init__() # 禁用nn.Linear自带偏置,使用自定义偏置 self.fc1 = nn.Linear(in_features=1, out_features=2, bias=False) self.output = nn.Linear(in_features=2, out_features=1, bias=False) # 自定义偏置,维度匹配对应层的输出节点数 self.bias1 = torch.tensor([2.0, 2.0]) self.bias2 = torch.tensor([3.0]) def act(self, x): return x**2 def forward(self, x): # 正确计算顺序:线性组合(输入×权重+偏置)→ 激活函数 x = self.act(self.fc1(x) + self.bias1) x = self.act(self.output(x) + self.bias2) return x def weights_initialization(self): with torch.no_grad(): # PyTorch中nn.Linear权重形状为[out_features, in_features],修正维度顺序 self.fc1.weight.copy_(torch.tensor([[0.2], [0.3]])) self.output.weight.copy_(torch.tensor([[1.5, 2.5]])) net = NeuralNet() # 调用权重初始化函数加载自定义权重 net.weights_initialization() input_data = torch.tensor([[5.]]) output = net(input_data) print(output) # 输出:tensor([[2220.7656]])
关键修正说明
- 禁用自带偏置:给
nn.Linear添加bias=False,避免默认偏置与自定义偏置重复叠加 - 修正权重维度:PyTorch中全连接层权重的形状是
[输出节点数, 输入节点数],原代码的权重维度顺序完全颠倒 - 调整计算顺序:按照预期逻辑先完成线性组合(输入×权重+偏置),再应用激活函数
- 调用初始化函数:必须手动调用
weights_initialization(),才能将自定义权重加载到网络中
内容的提问来源于stack exchange,提问作者Parisa asghari
相关产品推荐
相关产品推荐

