我是神经网络的新手,我正在使用Aforge神经网络库进行角色识别任务。我想使用反向传播来训练我的网络。这是AForge文档中给出的代码。
// initialize input and output values
double[][] input = new double[4][] {
new double[] {0, 0}, new double[] {0, 1},
new double[] {1, 0}, new double[] {1, 1}
};
double[][] output = new double[4][] {
new double[] {0}, new double[] {1},
new double[] {1}, new double[] {0}
};
// create neural network
ActivationNetwork network = new ActivationNetwork(
SigmoidFunction(2),
2, // two inputs in the network
2, // two neurons in the first layer
1); // one neuron in the second layer
// create teacher
BackPropagationLearning teacher = new BackPropagationLearning(network);
// loop
while (!needToStop)
{
// run epoch of learning procedure
double error = teacher.RunEpoch(input, output);
// check error value to see if we need to stop
// ...
}
但我不知道如何确定ActivationNetwork的层数和神经元数。任何帮助,将不胜感激。谢谢。
答案 0 :(得分:0)
我不确切知道,但在我看来,网络只能返回两个答案 - 0和1.所以一个神经元是0,第二个1,第二个层选择最大。
答案 1 :(得分:0)
对于XOR,你需要一个隐藏层,因为输出的真值表是0,1,1,0这意味着你不能用几行将这些模式几何分开。here is the proof optically。如果你可以用一条线划分图案空间,你可以使用一个感知器,典型的情况是OR,AND。在这些情况下,您不使用隐藏层,因为它们是线性分离的。尝试制作相应的图表以清楚地看到它并理解它。在所有情况下,你都有类> 2或类不是线性分离的,必须使用隐藏层。对于XOR,您需要一个隐藏层(隐藏层是网络的计算层),因为一个隐藏层能够分成类。现在因为两个类我们将有一个输出。这可以通过这个来计算:outputNeurons< = 2 ^ n n =类的数量,例如,如果你有3个类,则需要2个OutputNeurons,因为2 ^ 2 = 4
&LT; 3.现在在隐藏层中我们使用神经元,因为我们在pic 1中有两条线,两条线之间的区域称为决策区1,而在线之外的区域称为决策区2.因此,我们将有两个决策函数因此,我们必须有两个感知器,因为感知器会对一个决策区域进行分类,并且数学项是函数σ(x)=Σw* x + w0,并且在一个感知器的情况下我们通常用于激活阶梯函数(stepFunc(σ)=如果s <= 0,则1如果σ> 0或stepFunc(σ)= 0。隐藏层中的第一个神经元用于第一个决策区域,第二个用于第二个决策区域。第一个决策区域使用拳头感知器将图案(1,1)与其他图案分开,类似地,第二个感知器将图案(0,0)与其他图案分开。
最后,看看评论:
ActivationNetwork network = new ActivationNetwork(
SigmoidFunction(2),//这里是激活函数,在这种情况下是Sigmoid
2,//网络中的两个输入 - &gt;每次一张表[0,1] [1,1] [1,0] [1,1]
2,//第一层中的两个神经元 - &gt;隐藏层
1); //第二层中的一个神经元 - &gt;输出层
后向错误传播是一种无法在此向您展示其工作原理的算法。你可以在这里看到更多细节goole it。
希望有助于更好地理解简单神经网络的整体思路,但如果你想使用这些Aforge类,我的意见是你必须阅读神经网络背后的理论