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