ニューラル ネットワークを使用して交通標識を認識するプログラムを作成していますが、Hopfield
ネットワークに問題があります。この例を使用して、独自のホップフィールド ネットワークを作成しています。
0
入力として、正規化後にこれらの交通標識を使用します。これはとの 50x50 行列です1
。
私が遭遇する問題は、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;
}
の型はどこinputData
にありますか。array[2500]
double
私がこれまでに試したことは次のとおりです。
パターンのサイズを小さく変更 (10x10、20x20)。
さまざまな数のパターン (2 から 20 まで) を学習しようとしています。ネットワークがトレーニングされたパターンのいずれにも一致しない奇妙な結果が常に得られます。