我在为大学项目创建神经网络时遇到了一个问题。该网络将用于识别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之外的其他值,或者这仅仅是隐藏层中神经元数量过多的问题,或者是缩小图像尺寸的问题?
回答:
我至少看到了三个解决你问题的方法: