You need to enable JavaScript to run this app. PyTorch实现神经网络时出现UnboundLocalError: out引用前未赋值问题求解
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch实现神经网络时出现UnboundLocalError: out引用前未赋值问题求解

报错定位与解决

报错核心原因

UnboundLocalError: local variable 'out' referenced before assignment是Python层面的变量引用错误,和PyTorch网络逻辑本身无关,问题出在forward函数的变量名书写错位:
你定义forward逻辑时,执行顺序是先获取第一层全连接层的输出,再将该输出传入LeakyReLU激活层,最后经过第二层全连接层得到最终输出。但写激活层调用语句时,错把上一步生成的输出变量outfc1写成了还未被定义的out——out是你给第二层全连接层输出赋值时才会创建的变量,属于典型的提前引用未定义变量的语法错误。

问题代码片段

def forward(self,input):
    outfc1 = self.fc1(input) 
    # 此处错误引用了后续流程才会定义的out变量
    outfc1lrelu = self.lrelu(out)  
    out = self.fc2(outfc1lrelu) 
    return out

修复方案

将传入LeakyReLU层的参数替换为第一层全连接层的实际输出outfc1即可,修正后的forward逻辑:

def forward(self,input):
    outfc1 = self.fc1(input) 
    outfc1lrelu = self.lrelu(outfc1)  # 修正为引用fc1的真实输出
    out = self.fc2(outfc1lrelu) 
    return out

非报错触发的额外提示

  • 你原本计划基于MNIST数据集训练,当前代码实际加载的是乳腺癌二分类数据集,两者的输入维度、分类数差异较大,后续切换到MNIST数据集时,需要同步调整超参数:将input_size设为784(28*28图像展平后的维度)、num_classes设为10(手写数字0-9的分类数)。
  • 当前设置的Adam优化器学习率为1e-8数值过低,训练过程中模型参数几乎不会更新,100轮迭代后Loss不会出现明显下降,可将学习率调整到1e-3~1e-4区间观察训练效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 07:27:03