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
相关产品推荐
相关产品推荐

