繁体   English   中英

在实现人工神经网络时,应忽略输入层吗?

[英]When implementing Artificial Neural Networks, should the input layer be ignored?

我正在尝试在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个连接。

这真令人困惑,我希望有人能为我澄清一些事情。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM