2

我尝试用 hopfield 编写用于模式识别的神经网络。我使用Introduction to Neural Networks for C#, Second Edition book 中的说明,但我不使用他的 .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 形式:

在此处输入图像描述

4

1 回答 1

1

终于找到我的答案了!

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

于 2013-10-07T19:43:05.827 回答