问题标签 [es-hyperneat]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何使用 ESHyperNEAT 在 Java 中实现解决方案?
我对人工智能很感兴趣,两天前我发现了这个领域的一个有趣的最新发展,它被称为 ES-HyperNEAT,首先是 NEAT,然后是 HyperNEAT,然后是 ES-HyperNEAT。
以下是该主题的一些链接:
http://eplex.cs.ucf.edu/hyperNEATpage/
http://eplex.cs.ucf.edu/ESHyperNEAT/
所以我下载了AHNI的Java版,但是没有教程,我猜开发人员理所当然地认为它好用,但是对我来说,我不知道如何实现以下问题的解决方案,不看起来并不难,但有人可以告诉我如何开始吗?
输入看起来像这样:
程序应该从 Start Date 读取上述数据倒数 n 天到 End Date,对这些数据进行训练,正确的输出将始终是第二天的 D 值,我想知道如何用 ES-HyperNEAT 实现?
具体来说 :
有没有类似的东西: myProgram.start(FilePath,Delimiliter,Filed2,Field3,..,Line_X,Line_Y,...) ?
multithreading - 用于时间序列预测的 HyperNEAT 网络需要 Encog 帮助
我正在使用 Encog AI 框架使用 HyperNEAT 网络进行时间序列预测。
这是我用来创建网络的简单代码。
其中 columns 是特征的数量,windowSize 是预测未来值所需的前几天数(在我的示例中 windowSize 为 1)。
我得到这个例外:
Exception in thread "pool-2-thread-416" java.lang.ArrayIndexOutOfBoundsException
at org.encog.util.EngineArray.arrayCopy(EngineArray.java:107)
at org.encog.neural.neat.NEATNetwork.compute(NEATNetwork.java:194)
at org.encog.util.error.CalculateRegressionError.calculateError(CalculateRegressionError.java:46)
at org.encog.neural.networks.training.TrainingSetScore.calculateScore(TrainingSetScore.java:61)
at org.encog.ml.ea.score.parallel.ParallelScoreTask.run(ParallelScoreTask.java:83)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
处理线程似乎有问题。有人可以帮我解决这个问题吗?我的第二个问题是:如何在 Encog 中使用反向传播训练 NEAT 网络?
machine-learning - 有关于 NEAT 的 Encog 文档吗?
有没有关于如何使用 Encog Framework 的详细文档?我知道 UserGuide 提供的用户指南和encog github 存储库中的 C# 示例
但是我专注于使用 NEAT Networks,并且只有 XOR 示例可用。到目前为止,代码如下所示:
但是除此之外还有很多可用的功能,并且没有详细说明它们的作用?以及如何调整它们以最大限度地提高网络智能?
任何人都可以分享关于这个网络的任何见解吗?
machine-learning - 增强拓扑的神经进化 (NEAT) 和全球创新数量
我无法找到为什么我们应该为 NEAT 中的每个新连接基因设置一个全球创新编号。
根据我对 NEAT 的一点了解,每个创新号都直接对应一个 node_in、node_out 对,那么,为什么不只使用这对 id 而不是创新号呢?这个创新号有哪些新信息?年表?
更新
是算法优化吗?
python - NEAT 算法结果精度
我是一名博士生,正在尝试将该NEAT
算法用作机器人的控制器,但我遇到了一些准确性问题。我正在使用 Python 2.7 并为此使用两个NEAT
python 实现:
- 这
NEAT
是在这个 GitHub 存储库中的:https ://github.com/CodeReclaimers/neat-python 在 Google 中搜索,看起来它已在一些项目中成功使用。 multiNEAT
由 Peter Chervenski 和 Shane Ryan 开发的库:http: //www.multineat.com/index.html。NEAT
出现在软件目录的“官方”软件网页中。
在测试第一个时,我发现我的程序很快收敛到一个解决方案,但是这个解决方案不够精确。由于缺乏精确性,我想说的是与进化结束时的“完美”解决方案相关的中位数和平均值至少有 3-5% 的偏差(取决于问题的复杂性,误差约为 10%对我的解决方案来说是正常的。此外,我可以说我“从未”看到过低于 1% 的错误值(由 给出的NEAT
解决方案与正确的解决方案之间)。我必须说我已经尝试了很多不同的参数组合和配置(这对我来说是一个老问题)。
因此,我测试了第二个库。该MultiNEAT
库比前一个库收敛得更快、更容易。(我假设这是由于 C++ 实现而不是纯 Python)我得到了类似的结果,但我仍然有同样的问题;缺乏准确性。第二个库也有不同的配置参数,我还没有找到合适的组合来提高问题的性能。
我的问题是:结果
缺乏准确性是否正常NEAT
?它实现了很好的解决方案,但不足以控制机械臂,而这正是我想要使用它的目的。
如果有人在我提出问题的方式中发现一些概念或技术错误,我会写下我正在做的事情:
为了简化问题,我将展示一个非常简单的示例:我有一个非常简单的问题要解决,我想要一个可以计算以下函数的 NN:(使用or或类似函数y = x^2
可以找到类似的结果)y=x^3
y = x^2 + x^3
我开发该程序所遵循的步骤是:
- “Y”是网络的输入,“X”是输出。神经网络的激活函数是 sigmoid 函数。
- 我创建了一个“n”个样本的数据集,给定“X”的
xmin = 0.0
值xmax = 10.0
当我使用 sigmoid 函数时,我对“Y”和“X”值进行了标准化:
- “Y”在 (Ymin, Ymax) 和 (-2.0, 2.0) 之间线性归一化(sigmoid 的输入范围)。
- “X”在 (Xmin, Xmax) 和 (0.0, 1.0)(sigmoid 的输出范围)之间线性归一化。
创建数据集后,我细分为一个训练样本(占总量的 70%)、一个验证样本和一个测试样本(各占 15%)。
在这一点上,我创建了一群进行进化的个体。在所有训练样本中评估总体中的每个个体。每个位置被评估为:
eval_pos = xmax - abs(xtarget - xobtained)
个人的适应度是所有火车位置的平均值(我也选择了最小值,但它给了我更差的表现)。
在整个评估之后,我根据测试样本测试获得的最佳个体。这就是我获得那些“不精确的值”的地方。此外,在评估过程中,永远不会获得“abs(xtarget - xobtained) = 0”的最大值 。
此外,我假设我处理数据的方式是正确的,因为我使用相同的数据集来训练神经网络,Keras
并且我得到的结果比 NEAT 好得多(在 1000 个 epoch 之后可以实现小于 1% 的误差)层有 5 个神经元)。
此时,我想知道发生的情况是否正常,因为我不应该使用数据集来开发控制器,它必须“在线”学习,并且NEAT
看起来适合我的问题。
提前致谢。
编辑后的帖子:
首先,感谢尼克的评论。我将在下面回答您的问题::
我正在使用该
NEAT
算法。是的,我已经进行了增加种群中个体数量和世代数的实验。我得到的典型图表是这样的:
虽然这个例子中的人口规模不是很大,但我在增加个体数量或世代数的实验中获得了类似的结果。例如,500 个人和 500 代的人口。在这个实验中,he 算法快速收敛到一个解,但是一旦到了那里,最好的解就被卡住了,它不再改进了。
正如我在上一篇文章中提到的,我已经尝试了许多不同参数配置的实验......并且图形或多或少与之前显示的相似。
此外,我尝试过的其他两个实验是:一旦进化达到最大值和中值收敛的点,我会根据该基因组使用新的配置参数生成其他种群,其中:
突变参数随着突变的高概率(权重和神经元概率)而变化,以便找到新的解决方案,旨在从当前基因组“跳跃”到其他更好的基因组。
- 神经元突变减少到0,而权重“
mutation probability
”增加“mutate weight
”在较低的范围内,以便获得轻微的修改,目的是获得更好的权重调整。(试图获得与反向传播“相似”的功能。对权重进行轻微更改)
- 神经元突变减少到0,而权重“
这两个实验没有像我预期的那样奏效,而且人群中最好的基因组也和之前的人群一样。
- 很抱歉,但我不太明白你想说什么“在你的健身功能中应用你自己的加权惩罚和奖励”。在健身功能中加入体重惩罚是什么意思?
问候!
python-3.x - 如何在 NEAT(增强拓扑的神经进化)中设置层数?
NEAT 的解决方案空间仅限于 2 层 ANN。无法为配置文件归档参数,以便我可以获得超过 2 层。
我开始修改并使用 NEAT 的 xor2.py 文件用于我的数据集。因此,我的 NEAT 代码正在运行,但我想超越 2 层人工神经网络。现在我被困在解决方案空间中的 2 层人工神经网络。有没有办法在配置文件中指定我需要 3 层或更多层?我尝试检查进入配置文件的所有参数,但找不到。链接 - https://neat-python.readthedocs.io/en/latest/config_file.html
python-3.x - NEAT(增强拓扑的神经进化)的典型代数?
在得出 NEAT 算法无法达到最小值之前,是否有人估计过应该搜索的代数?
我在一个非常小的癌症患者数据集(约 5K 行)上运行 NEAT。并且经过5000代后,预测生存指数的一致性指数并没有提高。
在您认为这对给定问题无效之前,有没有人知道应该尝试多少代?
python - 我的增强拓扑实现的神经进化无法解决 XOR 问题
我最近尝试自己实现 NEAT(增强拓扑的神经进化),在解决 XOR 问题时,它似乎陷入了某种局部最大值。
我的实现能够按照 NEAT 算法的预期添加隐藏节点和连接,并且我的算法有可能解决它,因为它能够在数百代之后在极少数情况下解决它。
我在这个项目中的所有代码都可以在https://github.com/Maxwell-Hunt/NEAT找到,关于这个算法的原始论文可以在http://nn.cs.utexas.edu/downloads/找到论文/stanley.ec02.pdf。
当我试图让它解决 XOR 时,它通常能够得到正确的结果:[0,0] -> [0], [0,1] -> [1], [1,0] -> [1 ],但它也得到不正确的 [1,1] -> 1。