首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用神经网络和遗传算法求解异或问题

用神经网络和遗传算法求解异或问题
EN

Stack Overflow用户
提问于 2015-02-19 11:24:59
回答 1查看 1.7K关注 0票数 2

我试着用神经网络解决异或问题。为了训练我用了遗传算法。

但是经过一定数量的代数(200)后,错误卡在1,并且输出是正确的,除非输出是0,而不是1,我不明白为什么会发生这种情况。

人口规模: 100

交叉率: 70

突变率:5

精英人数:2

激活功能:乙状结肠

选择方法:有7人参加的比赛选择

变异算法

代码语言:javascript
运行
复制
for (int i=0; i< individual.getNbrOfWeights(); i++)

    if (random(0,100) < mutationRate)
    {
        genome[i] = genome[i] + random(-0.1,0.1);
    }

适应度计算=

代码语言:javascript
运行
复制
double error = 0;

error = error + feedForward({0, 1}, 1);
error = error + feedForward({1, 0}, 1);
error = error + feedForward({1, 1}, 0);
error = error + feedForward({0, 0}, 0);     

fitness = error;

其中,错误是目标输出。

我试着在变异中将权重设置在-2.2,但它变得更糟了(误差停留在1.6 )。所以如果它有义务在某一范围内设定重量.

我真的需要你的帮助,谢谢。

编辑

实际上,问题是在权值初始化和变异方法上。

  • 当我将权重设置在-11之间时,该算法不收敛.但我越扩大范围,就越能得到更好的结果,比如-4 - 4。
  • 对于突变,我尝试了两种方法(随机选择一个基因突变):

->在-0.1之间加入随机扰动,突变率为5% .这样,我在1800代就得到了最好的结果(网络输出就像期望的那样)。

->用一个新的基因改变基因的值。新的值应该属于范围。在这种情况下,我必须将变异率提高到50%,这样算法才能收敛。重量必须至少在-7到7之间,否则就不会收敛。

EN

回答 1

Stack Overflow用户

发布于 2015-02-21 10:43:20

您指定了sigmoid作为激活函数,但是您应用了负数,sigmoid使用的是正数。我认为这是问题的原因。您应该指定另一个激活函数,例如双曲正切函数(tanh)。

编辑:我现在很确定:重点是健身价值。我怀疑你把它评价为错误(也就是最小化它),同时选择个体作为更好的适合度值更高的个体。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28605129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档