【问题标题】:When implementing Artificial Neural Networks, should the input layer be ignored?在实现人工神经网络时,是否应该忽略输入层?
【发布时间】:2013-10-16 00:03:46
【问题描述】:

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

这真的很混乱,我希望有人能为我澄清一下。

【问题讨论】:

    标签: c# aforge


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-02
      • 1970-01-01
      • 2014-04-11
      • 2016-12-30
      • 2011-11-19
      • 2020-12-09
      • 1970-01-01
      相关资源
      最近更新 更多