我想在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库将输入层添加到网络,但它也会为连接添加权重。
综上所述,看看这三个网络图:
这三个图的一个是正确的?我想你可以说我正在实现一个虚拟输入层(不是将其添加到网络中,而是输入数组基本上是输入层)。如果是这样的话,那么如何实施hopfield网络呢?它有一个既是输入层又是输出层的层。在这种情况下,我的实现会产生错误的结果,因为虚拟输入层会存在。这意味着需要完全不同的输入层实现,以允许神经元与输入只有1个连接。
这变得非常混乱,我希望有人能为我澄清一些事情。