我正在尝试训练神经网络来控制2维角色的速度。 x和y介于-1和1米/秒之间。目前我将范围分成0.1米/秒的间隔,所以我最终得到400个输出神经元(20 x值* 20 y值),如果我将精度提高到0.01,最终得到40k输出神经元。有没有办法减少输出神经元的数量?
答案 0 :(得分:3)
我假设您将此问题视为分类问题。在培训时间内,您输入了X
和输出Y
。由于您正在训练神经网络进行分类,因此您的预期输出总是如下:
-1 -0.9 ... 0.3 0.4 0.5 ... 1.0 m/s
Y1 = [0, 0, ..., 1, 0, 0, ..., 0] // speed x component
Y2 = [0, 0, ..., 0, 0, 1, ..., 0] // speed y component
Y = [Y1, Y2]
即:对于x和y方向的每个速度分量,只有一个神经元输出1;所有其他神经元输出0(在上面的例子中,对于该训练实例,预期输出在x方向上为0.3m / s,在y方向上为0.5m / s)。实际上这可能更容易学习并且具有更好的预测性能。但正如你所指出的那样,它不会扩展。
我认为您也可以将问题视为回归问题。在您的网络中,每个速度组件都有一个神经元。您的预期输出只是:
Y = [0.3, 0.5] // for the same training instance you have.
要获得-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)中。这种变化(用两个神经元替换输出层中的多个神经元)大大降低了模型的复杂性,因此您可能希望在中间层添加更多神经元以避免不合适。