训练神经网络

时间:2016-02-21 23:48:47

标签: java neural-network backpropagation

我正在尝试训练一个神经网络来玩蛇追逐目标的游戏。这是我第一次尝试训练神经网络。我在Java中使用Encog框架进行反向传播。要创建训练集,我会记录用户在玩游戏时所做的动作。

神经网络由102个输入神经元,200个隐藏神经元和4个输出神经元组成。前2个输入是目标的x,y坐标,第3个和第4个输入是蛇头的x,y坐标,第5个,第6个输入是蛇的头部之后的x,y坐标如果蛇向左转,则第一个输出取数字1,否则转为零。第二个输出为右,第三个为up,4rth为down。输入在0和1之间归一化。

我曾尝试用30.000训练集训练网络,但是当我测试它时,蛇无法找到目标。它只是随机移动。

有多少训练集足以让网络得到正确的训练? 训练集会有一些错误的数据,例如当我玩游戏时,我有时会错过目标,并试图通过其他途径再次到达目标。

我在训练网络时必须使用什么最小错误? 现在我用0.02。问题在于,当我训练网络时,它仅在35次迭代中从0.75错误变为0.05错误,但它需要超过1000次迭代才能从0.05变为0.02。

1 个答案:

答案 0 :(得分:1)

  

如果蛇向左转,则第一个输出取数字1,否则转为零。第二个输出为右,第三个为向上,4个为向下

如果我假设从左视图中左转右上方是类似导航的视图。我认为问题是因为你的训练数据集输入了蛇的位置,而不是方向。

示例:

  • 如果你只有一个尺寸头在(0,0)并且方向上升(y正),并且目标在(3,3),你的机器可能会告诉它向右转。将蛇移动到(0,1)。
  • 然后在你的位置(0,1)后,你的训练组将告诉它再次向右转(因为蛇的位置是目标左侧的一个),但实际上它会将蛇移动到(-1,1)