neural-network - 神经网络不收敛 - 使用多层感知器

标签 neural-network

我开发了一个“Pong”风格的游戏,它实际上在屏幕底部有一个球,左右有弹性墙,顶部有粘性墙。它随机选择底部的一个点(在水平直线上)和一个随机的角度,从侧壁反弹,并击中顶壁。这将重复 1000 次,每次都是发射位置的 x 值、发射角度和它在顶壁上碰撞的位置的最终 x 值。

这给了我 2 个输入 - 发射和发射角度的 x 值和 1 个输出 - 最终位置的 x 值。我尝试使用具有 2 个输入节点、2 个隐藏节点(1 层)和 1 个输出节点的多层感知器。然而,它会收敛到大约 20 点,然后逐渐变小。这是我尝试过的,但都没有帮助,要么错误永远不会收敛,要么开始发散:

  • 将输入和输出转换为介于 0 和 1 之间
  • 将输入和输出转换为 -1 和 1 之间
  • 增加隐藏层数
  • 增加隐藏层节点数
  • 将发射位置、发射角度和最终位置转换为 0s 和 1s,导致 ~750+175 个输入和 ~750 个输出 - 不收敛

  • 所以,在花了一个晚上和一个早上,让我的大脑和 body 对我产生反感之后,我希望有人能帮我找出这里的问题。这是神经网络无法解决的任务还是我做错了什么?

    PS:我用的是Neuroph的网络版而不是编码我自己的程序。至少这将帮助我避免实现中的问题

    最佳答案

    如果它没有最小化训练错误,那很可能是实现中的错误。另一方面,如果您在保留的测试集上测量准确度,那么一段时间后误差上升也就不足为奇了。

    至于公式,我认为有足够的训练数据和足够长的训练时间,一个足够复杂的神经网络可以学习映射,无论你是否对输入进行二值化(前提是你使用的实现支持非二元输入和输出)。我对上面句子中“足够”的含义只有一个模糊的概念,但我敢猜测 1000 个样本是行不通的。还要注意,网络越复杂,估计参数通常需要的数据就越多。

    关于neural-network - 神经网络不收敛 - 使用多层感知器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12930517/

    相关文章:

    java - 提取用于 Weka 多层感知器标准化的值

    machine-learning - 你如何用 Tensorflow.JS 实现 softmax

    python - Tensorflow - 平均恢复模型的模型权重

    c++ - 神经网络不学习 - MNIST 数据 - 手写识别

    keras - 用于视频输入的 LSTM

    python - 如何看待 Keras 中提前停止导致的最佳纪元的损失?

    python - sklearn preprocessing.scale() 函数,什么时候使用它?

    machine-learning - 访问完全连接中的变量和偏置张量

    python - TensorFlow 类型错误 : Value passed to parameter input has DataType uint8 not in list of allowed values: float16, float32

    python - 如何给keras一个恒定的输入