2013-10-15 29 views
2

我想在c#中实现人工神经网络,但我不完全明白输入图层的目的是什么。它不做任何处理,因为它的神经元和输入之间的连接没有权重。实施人工神经网络时,输入层是否应该被忽略?

考虑下面的代码:

//Network 
    public void Compute(float[] input) { 
     layers[0].Compute(input); 

     for (int i = 1; i < layers.Length; i++) { 
      layers[i].Compute(layers[i - 1].Output); 
     } 
    } 

    //Layer 
    public void Compute(float[] input) { 
     for (int i = 0; i < neurons.Length; i++) { 
      output[i] = neurons[i].Compute(input); 
     } 
    } 

    //Neuron 
    public float Compute(float[] Input) { 
     float output = 0.0f; 
     for (int i = 0; i < Input.Length; i++) { 
      output += Input[i] * weights[i]; 
     } 

     return (output); 
    } 

当添加层到网络,我并不需要,因为输入数组被直接传递到隐藏/输出层,以添加的输入层。那是对的吗?如果是这样,那么AForge.Net库似乎做错了。 AForge库将输入层添加到网络,但它也会为连接添加权重。

综上所述,看看这三个网络图: enter image description here

这三个图的一个是正确的?我想你可以说我正在实现一个虚拟输入层(不是将其添加到网络中,而是输入数组基本上是输入层)。如果是这样的话,那么如何实施hopfield网络呢?它有一个既是输入层又是输出层的层。在这种情况下,我的实现会产生错误的结果,因为虚拟输入层会存在。这意味着需要完全不同的输入层实现,以允许神经元与输入只有1个连接。

这变得非常混乱,我希望有人能为我澄清一些事情。

回答

1

在传统术语中,“输入层”是输出输入的一组神经元,因此它们可以被实际进行计算的其他层消耗。输入神经元不做计算,因为它们没有任何输入来进行计算。

所以你的理解是正确的。在“传统”图中,输入层不是“计算层”。你只需要实现实际的“计算层”。

从我在您的文章中看到的内容看来,AForge库可能只是使用不同的术语,即它可能会将第一个计算层(即正在读取输入的计算层)称为输入层。