我尝试用 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 形式: