我刚刚开始阅读神经网络,我有一个基本问题。关于“初始化”Hopfield网络,我无法理解初始化的概念。也就是说,我们输入一些随机数吗?假设所有神经元处于等于零的状态,其他稳定状态在输入后为1或-1,或输入一个明确定义的模式,使神经元第一次稳定下来。
考虑下面的神经网络。我从HeatonResearch
获取的如果有人把这个清除给我,我很高兴。
答案 0 :(得分:3)
当初始化神经网络(包括重复的Hopfield网络)时,通常使用随机权重进行初始化,因为通常会在多次试验和整个运行集合中提供良好的学习时间,这将避免局部最小值。在多次运行中从相同的起始重量开始通常不是一个好主意,因为您可能会遇到相同的局部最小值。通过一些配置,可以通过分析节点在功能映射中的角色来加快学习速度,但这通常是在获得某些工作后的分析中的后续步骤。
答案 1 :(得分:2)
Hopefiled网络的目的是回忆它已经显示的数据,作为内容可寻址的内存。它以一块干净的石板开始,所有重量均设为零。在矢量上训练网络会调整权重以响应它。
Hopfield网络中节点的输出取决于每个其他节点的状态以及节点与其连接的权重。状态对应于输入,intput 0映射到-1,输入1映射到1.因此,如果示例中的网络输入1010,则N1将具有状态1,N2 -1,N3 1和N4 - 1。
训练网络意味着将输出与其自身之间的点积添加到权重矩阵,将对角线设置为零。因此,要在10101上训练,我们会将[1 -1 1 -1]·[1 -1 1 -1] add加到权重矩阵中。
答案 2 :(得分:0)
您可以结帐此存储库 - > Hopfield Network
在离线训练网络后,您有一个测试模式的示例。这是测试
@Test
public void HopfieldTest(){
double[] p1 = new double[]{1.0, -1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0};
double[] p2 = new double[]{1.0, 1.0,1.0,-1.0,1.0,-1.0,-1.0,1.0,-1.0};
double[] p3 = new double[]{1.0, 1.0,-1.0,-1.0,1.0,-1.0,-1.0,1.0,-1.0};
ArrayList<double[]> patterns = new ArrayList<>();
patterns.add(p1);
patterns.add(p2);
Hopfield h = new Hopfield(9, new StepFunction());
h.train(patterns); //train and load the Weight matrix
double[] result = h.test(p3); //Test a pattern
System.out.println("\nConnections of Network: " + h.connections() + "\n"); //show Neural connections
System.out.println("Good recuperation capacity of samples: " + Hopfield.goodRecuperation(h.getWeights().length) + "\n");
System.out.println("Perfect recuperation capacity of samples: " +
Hopfield.perfectRacuperation(h.getWeights().length) + "\n");
System.out.println("Energy: " + h.energy(result));
System.out.println("Weight Matrix");
Matrix.showMatrix(h.getWeights());
System.out.println("\nPattern result of test");
Matrix.showVector(result);
h.showAuxVector();
}
运行测试后,您可以看到
Running HopfieldTest
Connections of Network: 72
Good recuperation capacity of samples: 1
Perfect recuperation capacity of samples: 1
Energy: -32.0
Weight Matrix
0.0 0.0 2.0 -2.0 2.0 -2.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 -2.0 2.0 -2.0
2.0 0.0 0.0 -2.0 2.0 -2.0 0.0 0.0 0.0
-2.0 0.0 -2.0 0.0 -2.0 2.0 0.0 0.0 0.0
2.0 0.0 2.0 -2.0 0.0 -2.0 0.0 0.0 0.0
-2.0 0.0 -2.0 2.0 -2.0 0.0 0.0 0.0 0.0
0.0 -2.0 0.0 0.0 0.0 0.0 0.0 -2.0 2.0
0.0 2.0 0.0 0.0 0.0 0.0 -2.0 0.0 -2.0
0.0 -2.0 0.0 0.0 0.0 0.0 2.0 -2.0 0.0
Pattern result of test
1.0 1.0 1.0 -1.0 1.0 -1.0 -1.0 1.0 -1.0
-------------------------
The auxiliar vector is empty
我希望你觉得它很有用。此致