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

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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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