模式识别Hopfield

时间:2013-10-02 14:47:58

标签: c# matrix artificial-intelligence neural-network

我尝试用Hopfield编写神经网络进行模式识别。我使用Introduction to Neural Networks for C#, Second Edition书中的说明,但我不使用他的.dll文件并自己编写所有类。

Jeff Heaton在他的书中说,对于带有Hopfield的火车神经网络,我们应该接收输入模式(矩阵形式),然后执行以下3个步骤:

1 - 将二进制输入转换为双极性(0 - >( - 1),1 - > 1)

2 - 将输入矩阵转换为行矩阵(另存为M2),然后将其转置(保存为M1),然后乘以(M3 = M1 * M2)

3-添加到重量矩阵(WeightMatrix + = M3)

我的问题是关于第2步! 当我将8X8矩阵转换为行矩阵时,代码如下:

        int count = 0;
        int[] RowMatrix = new int[64];
        for(int j=0; j<8;j++)
            for (int i = 0; i < 8; i++)
            {
                RowMatrix[count] = PatternBipolar[i, j];
                count++;
            }

(PatternBipolar是转换为双极的输入模式) 我们有1X64矩阵,转置时我们有列矩阵64X1。因此,如果我们将它们相乘(ColumnMatrix * RowMatrix如书所示),我们有64X64矩阵!!

但我们的体重矩阵是8X8(因为我们只有64个神经元而不是64 * 64 = 4096 !!!神经元)。

所以我很困惑,需要帮助。请帮我解决这个问题以及这个矩阵。.

我收到下面表格的输入矩阵,并使用windows form:

enter image description here

1 个答案:

答案 0 :(得分:1)

最后我找到了答案!

在Hopfield网络中,当我们在网络中使用n神经元时,我们需要nXn权重矩阵。我们只需要将行矩阵乘以输入,并将其反转。然后在权重矩阵中我们有每个矩阵和其他矩阵之间的关系。