有关并行运行神经网络的最佳方式的建议

问题描述 投票:0回答:1

我在 2023 年的最后几天开始了一个个人项目,只是为了好玩 - 我用 Python 重新创建了经典的“贪吃蛇游戏”(来自旧的诺基亚手机),我想将其与一些机器学习方法集成,以便 ML 算法能够学习如何玩并擅长它。

我的期望是像遗传算法+神经网络这样的东西,我“并行”实例化许多游戏,让它们玩直到所有游戏结束,最后选择最好的并尝试进化它们(应用一些随机突变)并最终交叉)。

在实施方面,这是一个简单的交易,但在性能方面,一旦我将 Keras 集成到项目中,它就开始变得非常慢 - 但这可能是我的错,也许还有其他最佳方法来做到这一点。

基本上,我做了以下事情:

  • 创建了“N”个贪吃蛇游戏实例
  • 创建了简单 Keras 顺序模型的“N”个实例 (此步骤严重损害性能)
  • 创建了一个 for 循环来重新计算所有“N”个游戏的“下一步”,其中“第 N”个游戏的下一步是基于其当前状态作为“第 N”个神经网络的输入提供的,其中提供最佳的“下一步”作为其输出;
  • 更新了包含所有贪吃蛇游戏的游戏屏幕(仅用于视觉反馈/乐趣,使用 pygame)
  • 重复这些步骤,直到所有游戏结束,然后根据最好的突变进化所有神经网络,并重新启动游戏循环(开始“新一代”)。

事实是,尽管模型的拓扑非常简单,但使用所有这些“N”个 Keras 实例在性能方面似乎是一个糟糕的选择。

我正在考虑手动实现一个 ANN 模型,完成所有矩阵乘法,这样它会变得更轻,但在这样做之前我想问这里 - 是否有任何其他可用的 Python 资源可以满足我的需要?

python keras neural-network genetic-algorithm mutation
1个回答
1
投票

虽然很有趣,但将遗传算法与神经网络结合起来非常慢。当群体中的个体可以在一毫秒内得到测试/验证时,遗传算法就能很好地工作。每当涉及训练网络时,事情就会变得慢得多。

在步骤中的哪个位置将损失反向传播到神经网络?如果每一步都完成,那么每 x 步执行一次就会加快速度。

我不确定是否有适合这些情况的资源。保持模型简单,在 GPU 上运行它们并在每 x 步传播损失会改善情况,但我并不期待奇迹。

© www.soinside.com 2019 - 2024. All rights reserved.