减少输出神经元的数量

我正在尝试训练一个神经网络来控制角色在二维空间中的速度,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

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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