You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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]])

关键修正说明

  1. 禁用自带偏置:给nn.Linear添加bias=False,避免默认偏置与自定义偏置重复叠加
  2. 修正权重维度:PyTorch中全连接层权重的形状是[输出节点数, 输入节点数],原代码的权重维度顺序完全颠倒
  3. 调整计算顺序:按照预期逻辑先完成线性组合(输入×权重+偏置),再应用激活函数
  4. 调用初始化函数:必须手动调用weights_initialization(),才能将自定义权重加载到网络中

内容的提问来源于stack exchange,提问作者Parisa asghari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 15:46:07