大量输入神经元导致大的加权和

时间:2016-11-02 15:12:21

标签: machine-learning neural-network sigmoid

我试图为我的大学项目创建一个神经网络并遇到了问题。该网络将用于图像识别,以识别320×200像素图像。这意味着,我网络中输入神经元的数量是64.000(320 * 200)。

问题是,当计算隐藏层中每个神经元的加权和时,我会得到非常大的数字。因此计算加权和时,我得到的结果如16000.这是我计算加权和的代码,希望它能说明我的所作所为。

for(int i = 0; i < sizes[layer - 1]; i++){
    double sum = 0;
    for(int j = 0; j < a.size(); j++){
        sum += a[j] * weights[layer - 2][i][j];
        sum += biases[layer - 2][i];
    }
    out[i] = Sigmoid(sum);
}

我不会详细了解代码,但它的概念是将每个权重乘以相应的输入值。当然,当我得到例如16.000或-16.000的输出激活时,运行Sigmoid函数将始终返回0或1.

我的问题是:有没有办法解决这个问题,以及#34;规范化&#34;加权的和使得Sigmoid函数将返回0或1以外的其他函数,或者只是隐藏层中有大量神经元或缩小图像的问题?

1 个答案:

答案 0 :(得分:1)

我发现至少有三种解决方案可以解决您的问题:

  1. Xavier Initialization :这会让你的神经元不仅避免使用苛刻的值作为第一层sigmoids的输入,而且避免因后续层的问题而产生同样的问题。

  2. 使用relu单位:输入的主要问题是一种称为消失渐变的现象。使用不同的激活功能可以克服这个问题。

  3. 应用convolutional neural layer 作为最先进的图像识别架构可以解决您的问题,因为内核尺寸较小。