代码之家  ›  专栏  ›  技术社区  ›  Matheus Felipe

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

  •  0
  • Matheus Felipe  · 技术社区  · 1 年前

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

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

    就实现而言,这是一件容易的事情,但就性能而言,一旦我将Keras集成到项目中,它就开始变得非常慢——但可能是我的错,也许还有其他最佳方法可以做到这一点。

    基本上,我做了以下几点:

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

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

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

    0 回复  |  直到 1 年前
        1
  •  0
  •   Paplepel93    1 年前

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

    在这些步骤中,你在哪里反向预测神经网络的损失?如果每走一步,每走x步就会加快速度。

    我不确定是否有资源来应对这些情况。保持模型的简单性,在CPU上运行它们,并以非常x的步长分配损失,这将改善情况,但我并不期待奇迹。