首页 > 解决方案 > 如何创建强化学习神经网络来玩飞扬的小鸟?

问题描述

我使用 PyGame 创建了一个 Flappy Bird 克隆,我想教一个 TensorFlow 强化学习神经网络如何使用鸟的 y 位置、鸟的速度、到下一个最近的“管道”的距离以及 y 位置来玩它管道 top_y 和 bottom_y 之间的间隙。因此,5 个输入产生 1 个输出——预测鸟是否应该跳跃。

抱歉这种格式 - StackOverflow 认为它是代码。这是我 的仓库: https : //github.com/joshuadargan/PenguinoFly.ai 这个问题的关键文件是 Game.py 和 NeuralNetwork.py:https://github.com/joshuadargan/PenguinoFly.ai/blob/master /NeuralNetwork.py https://github.com/joshuadargan/PenguinoFly.ai/blob/master/Game.py

我尝试查看很多不同的教程来解决问题,我主要基于我的神经网络代码: https ://towardsdatascience.com/reinforcement-learning-tutorial-part-3-basic-deep-q-learning -186164c3bf4

本教程讨论了批处理数据,并且输入和输出是二维的以允许批处理。我认为批处理数据是不可能的。为了能够使用上述 5 个变量和 1 个输出进行实时训练,我应该进行哪些更改。

该教程还提到了 one_hot,我认为这不适用于我的情况。我应该把它放在那里吗?

我已尝试使用我的系统的更改运行它(删除 one_hot 并调整输入和输出),但我收到此错误:

ValueError: Cannot feed value of shape (5,) for Tensor 'Placeholder:0', 
which has shape '(?, 5)'

它从我称之为更新的 Game.py 中的第 165 行开始。然后在 NeuralNetwork.py 中的第 101 行调用 train,然后在第 82 行调用 get_Q,然后在第 54 行的 get_Q 函数中产生错误。

我假设其中也存在其他错误,但我无法绕过此错误。我试图将占位符更改为 1 阶张量,但隐藏层需要 2 阶张量。我也尝试将数据分布在两个数组中以满足它,但这也不起作用。

我希望输入上述 5 个变量作为游戏的“状态”,并且我希望一个介于 0-1 之间的数字代表我应该在该状态下跳跃或不跳跃的百分比。

我应该怎么做才能解决这个问题,你对我的神经网络有什么设计建议?谢谢!!

标签: pythonpython-3.xtensorflowpygamereinforcement-learning

解决方案


推荐阅读