gpt4 book ai didi

java - 使用 Hopfield 网络结果不佳

转载 作者:太空宇宙 更新时间:2023-11-04 07:53:09 27 4
gpt4 key购买 nike

我正在编写一个使用神经网络识别交通标志的程序,但我在 Hopfield 网络方面遇到了问题。我正在使用this example制作我自己的 hopfield 网络。

作为输入,我使用标准化后的这些交通标志,它是 01 的 50x50 矩阵。

我遇到的问题是,当 Hopfield 网络学习 2 个模式时,它可以很好地识别它们,但是当我尝试用 2 个以上的模式来训练它时,结果它给出的模式与它所训练的任何模式都不匹配,并且它会针对我提供的任何输入返回该模式。

这是我的代码,与官方 encog 示例中的代码非常相似:

public BiPolarNeuralData convertPattern(double[][] data, int index)
{
int resultIndex = 0;
BiPolarNeuralData result = new BiPolarNeuralData(WIDTH*HEIGHT);
for(int i=0;i<(WIDTH*HEIGHT);i++)
{
boolean znak=true;
if(data[index][i]==1)znak=true;
else znak=false;
result.setData(resultIndex++,data[index][i]==1.0);
}

return result;
}

public void display(BiPolarNeuralData pattern1,BiPolarNeuralData pattern2)
{
int index1 = 0;
int index2 = 0;

for(int row = 0;row<HEIGHT;row++)
{
StringBuilder line = new StringBuilder();

for(int col = 0;col<WIDTH;col++)
{
if(pattern1.getBoolean(index1++))
line.append('O');
else
line.append(' ');
}

line.append(" -> ");

for(int col = 0;col<WIDTH;col++)
{
if(pattern2.getBoolean(index2++))
line.append('O');
else
line.append(' ');
}

System.out.println(line.toString());
}
}


public void evaluate(HopfieldNetwork hopfieldLogic, double[][] pattern)
{
for(int i=0;i<pattern.length;i++)
{
BiPolarNeuralData pattern1 = convertPattern(pattern,i);
hopfieldLogic.setCurrentState(pattern1);
int cycles = hopfieldLogic.runUntilStable(100);
BiPolarNeuralData pattern2 = hopfieldLogic.getCurrentState();
System.out.println("Cycles until stable(max 100): " + cycles + ", result=");
display( pattern1, pattern2);
System.out.println("----------------------");
}
}

public BasicNetwork trainHopfieldNetwork(){
HopfieldNetwork hopfieldLogic = new HopfieldNetwork(HEIGHT*WIDTH);

for(int i=0;i<inputData.length;i++)
{
hopfieldLogic.addPattern(convertPattern(inputData,i));
System.out.println("Pattern : "+i);
}

evaluate(hopfieldLogic,inputData);

return null;
}

其中 inputDatadouble 类型的 array[2500]

到目前为止我尝试过的是:

  1. 将图案尺寸更改为更小(10x10、20x20)。

  2. 尝试学习不同数量的模式(从 2 到 20)。我总是得到奇怪的结果,与网络训练的任何模式都不匹配。

最佳答案

所以归根结底问题是网络的学习规则,因为encog框架只实现了hebb学习规则,这对于复杂的网络来说不太有用,我必须实现伪反转学习规则,之后hopfield网络开始毫无困难地识别模式

关于java - 使用 Hopfield 网络结果不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14074485/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com