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

Simple Neural Network(形状图像识别)输出相同结果问题求助

形状检测简易神经网络固定输出问题排查方案

你提供的推理代码如下:

corrects, wrongs = 0, 0

print('Target', '     Predicted', ' %')
for i in range(len(x_test)):
    input_vector = np.array(x_test[i], ndmin=2).T
    output_vector = np.dot(wh,  input_vector)
    output_vector = sigmoid(output_vector)
    output_vector = np.dot(wo, output_vector)
    res = sigmoid(output_vector)
    
    #Evaluate Model
    res_max = res.argmax()
    e = np.array(res_max)
    e = np.eye(3)[res_max]
    e.astype('int32')
    if np.array_equal(e,y_test[i]) :
        corrects += 1
    else:
        wrongs += 1
    
    print(y_test[i], ' ',e, '       ', np.max(res))
    
print("accuracy:", corrects / ( corrects + wrongs))

可按以下顺序逐步排查定位问题:

  • 输入侧验证:打印不同测试样本的input_vector,确认输入数据确实存在差异,排除测试集加载错误、所有样本重复的问题;检查输入数据是否做了归一化,若直接输入0-255的原始像素值,矩阵点乘后数值过大会导致sigmoid进入饱和区,输出区分度极低,看起来就像所有结果完全一致。
  • 权重逻辑排查:确认推理时调用的wh、wo是训练完成后保存的权重,而非随机初始化的未训练参数;检查权重初始化逻辑,不能全初始化为0或完全相同的数值,否则所有神经元更新路径一致,输出不会产生差异;如果初始化范围过大,也会直接导致sigmoid饱和,训练阶段参数无法正常更新。
  • 训练流程校验:检查反向传播的梯度计算逻辑,确认sigmoid导数实现正确,没有出现梯度消失或梯度爆炸的情况;调整学习率大小,学习率过小参数几乎不更新,学习率过大参数会偏离合理区间,都会导致输出固定;检查损失函数是否匹配3分类任务,错误的损失函数会让模型优化方向完全偏离预期。
  • 数据集分布检查:统计训练集的类别分布,若某一类样本占比过高,模型会倾向于直接全部预测为该类获取最高训练准确率,不会学习其他类的特征。
  • 最小单元测试:手动构造两个差异极大的自定义向量输入模型,观察输出是否有差异。如果输出仍然完全相同,直接定位为模型权重或计算逻辑的问题;如果输出存在差异,说明问题出在数据集或预处理环节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:39:01