我尝试用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:
答案 0 :(得分:1)
最后我找到了答案!
在Hopfield网络中,当我们在网络中使用n神经元时,我们需要nXn权重矩阵。我们只需要将行矩阵乘以输入,并将其反转。然后在权重矩阵中我们有每个矩阵和其他矩阵之间的关系。