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

跟随鼠标光标AI的神经网络输入异常问题排查求助

神经网络输入节点失效问题排查与修复

问题描述

开发了一款跟随鼠标光标的AI,初始设置mouseX和mouseY两个输入节点,但神经网络始终忽略mouseX的位置数据。尝试新增一个mouseX输入节点(输入节点变为:1: mouseX、2: mouseY、3: mouseX)后,神经网络转而忽略mouseY,仅使用mouseX数据。推测问题出在负责数值运算的compute()函数中,函数代码如下:

#brains: amount of AIs
#hiddenLayerAmount: amount of hidden layers (in this case 1)
#hiddenNodes[j]: Amount of nodes (2)

def compute():
    for i in range(brains):
        #INPUT LAYER TO FIRST HIDDEN LAYER
        for j in range(hiddenLayerAmount):
            for k in range(hiddenNodes[j]):
                if j == 0:
                    for l in range(inputNodes):
                        #OUTPUT                    #INPUT           #WEIGHT                     #BIAS
                        hiddenLayers[i][j][k][2] = inputLayer[i][l]*hiddenLayers[i][j][k][0][l]+hiddenLayers[i][j][k][1]
                        
                #HIDDEN LAYER TO NEXT HIDDEN LAYER
                else:
                    for l in range(hiddenNodes[j-1]):
                        #OUTPUT                    #INPUT                     #WEIGHT                     #BIAS
                        hiddenLayers[i][j][k][2] = hiddenLayers[i][j-1][k][2]*hiddenLayers[i][j][k][0][l]+hiddenLayers[i][j][k][1]
        #LAST HIDDEN LAYER TO OUTPUT LAYER
        for j in range(outputNodes):
            for k in range(hiddenNodes[-1]):
                #OUTPUT                #INPUT                    #WEIGHT                 #BIAS
                outputLayer[i][j][2] = hiddenLayers[i][-1][k][2]*outputLayer[i][j][0][k]+outputLayer[i][j][1]

问题根源

代码的核心错误是每次循环输入节点时直接覆盖输出值,而非累加所有输入的加权贡献:

  • 在输入层到隐藏层的计算中,每遍历一个输入节点l,就会用当前输入的加权值+偏置直接替换节点输出,最终只保留了最后一个输入节点的计算结果
  • 当输入为2个节点时,最后执行的是l=1(对应mouseY),所以看起来忽略了mouseX;当输入为3个节点时,最后执行的是l=2(对应第三个mouseX),所以看起来忽略了mouseY

修复后的代码

修改计算逻辑,先初始化节点输出为偏置,再累加所有输入的加权值:

#brains: amount of AIs
#hiddenLayerAmount: amount of hidden layers (in this case 1)
#hiddenNodes[j]: Amount of nodes (2)

def compute():
    for i in range(brains):
        #INPUT LAYER TO FIRST HIDDEN LAYER
        for j in range(hiddenLayerAmount):
            for k in range(hiddenNodes[j]):
                if j == 0:
                    # 初始化输出为偏置
                    hiddenLayers[i][j][k][2] = hiddenLayers[i][j][k][1]
                    # 累加所有输入节点的加权贡献
                    for l in range(inputNodes):
                        hiddenLayers[i][j][k][2] += inputLayer[i][l] * hiddenLayers[i][j][k][0][l]
                        
                #HIDDEN LAYER TO NEXT HIDDEN LAYER
                else:
                    # 初始化输出为偏置
                    hiddenLayers[i][j][k][2] = hiddenLayers[i][j][k][1]
                    # 累加前一层所有节点的加权贡献
                    for l in range(hiddenNodes[j-1]):
                        hiddenLayers[i][j][k][2] += hiddenLayers[i][j-1][k][2] * hiddenLayers[i][j][k][0][l]
        #LAST HIDDEN LAYER TO OUTPUT LAYER
        for j in range(outputNodes):
            # 初始化输出为偏置
            outputLayer[i][j][2] = outputLayer[i][j][1]
            # 累加最后一层隐藏节点的加权贡献
            for k in range(hiddenNodes[-1]):
                outputLayer[i][j][2] += hiddenLayers[i][-1][k][2] * outputLayer[i][j][0][k]

修复说明

  • 所有层的节点输出先初始化为对应偏置值,确保偏置被正确纳入计算
  • 通过循环累加每个输入源的加权值,保证所有输入节点的信息都被神经网络接收,不会被后续输入覆盖
  • 修改后,神经网络会同时处理mouseX和mouseY的输入数据,不会再出现忽略单个输入的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 13:05:10