减少输出神经元的数量

我正在尝试训练一个神经网络来控制角色在二维空间中的速度,x和y的速度范围在-1到1米/秒之间。目前我将这个范围划分为0.1米/秒的区间,因此我最终得到了400个输出神经元(20个x值 * 20个y值)。如果我将精度提高到0.01米/秒,我将得到40,000个输出神经元。有没有办法减少输出神经元的数量?


回答:

我假设你将这个问题视为一个分类问题。在训练过程中,你有输入X和输出Y。由于你在进行分类训练,你的预期输出总是像这样:

    -1  -0.9 ...  0.3  0.4  0.5 ... 1.0 m/sY1 = [0,  0,  ..., 1,   0,   0,  ..., 0]  // x方向速度分量Y2 = [0,  0,  ..., 0,   0,   1,  ..., 0]  // y方向速度分量Y  = [Y1, Y2]

也就是说:对于x和y方向的每个速度分量,只有一个神经元输出1;所有其他神经元输出0(在上面的例子中,预期输出是x方向0.3米/秒,y方向0.5米/秒,针对这个训练实例)。实际上,这可能更容易学习,并且具有更好的预测性能。但正如你指出的,它不具备扩展性。

我认为你也可以将这个问题视为一个回归问题。在你的网络中,你为每个速度分量设置一个神经元。你的预期输出只是:

Y = [0.3, 0.5]  // 针对你拥有的同一个训练实例。

为了获得-1到1的输出范围,你在输出层有不同的激活函数选项。例如,你可以使用

f(x) = 2 * (Sigmoid(x) - 0.5)Sigmoid(x) = 1 / (1 + exp(-x))

由于sigmoid (x) 在(0,1)之间,2*(sigmoid(x) – 0.5) 在(-1,1)之间。这种改变(用两个神经元替换输出层中的多个神经元)大大降低了模型的复杂性,因此你可能需要在中间层增加更多的神经元以避免欠拟合。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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