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 库向网络添加了输入层,但它也向连接添加了权重。

总结一下,看看这三个网络图: 在此处输入图像描述

三张图哪一张是正确的?

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

这变得非常混乱,我希望有人可以为我澄清事情。

4

1 回答 1

1

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

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

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

于 2013-10-15T16:03:46.710 回答