输入神经元数量过多导致加权和过大

我在为大学项目创建神经网络时遇到了一个问题。该网络将用于识别320 x 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。

我的问题是:有没有什么方法可以解决这个问题,以“归一化”加权和,使Sigmoid函数返回除0或1之外的其他值,或者这仅仅是隐藏层中神经元数量过多的问题,或者是缩小图像尺寸的问题?


回答:

我至少看到了三个解决你问题的方法:

  1. Xavier初始化:这可以使你的神经元避免不仅仅是作为第一层Sigmoid的输入的极端值,而且还可以避免后续层出现相同的问题。

  2. 使用relu单元:你的输入的主要问题是一个称为梯度消失的现象。使用不同的激活函数可以克服这个问题。

  3. 应用卷积神经层,这被认为是图像识别的最先进架构,可以通过较小的核尺寸来解决你的问题。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注