神经网络介绍
神经网络通常是分层的,至少有一个输入和输出层,也许还有隐藏层,某些神经网络类型不会在输入和输出层之外分解成任何形式层,然而,这个输入层和输出层将永远存在,也许可能被整合在同一层,我们现在先介绍一下输入层,输出层和隐藏层。
-
输入层
输入层是神经网络的第一层,和其他层一样,这一层包括了一个指定数字的神经元,同一层的神经元都含有相似的属性,一般情况下,对于分类,回归或者聚类的神经网络的每个属性,输入层都会有一个神经元与之一一对应。
神经元的数量决定了神经网络层的结构,对于每个输入神经元,假设输入层数组中是一个double值,例如,以下的数组能够输入到一个包含五个神经元层的结构中double[] input = new double[5]; -
输出层
输出层是神经网络的最后一层,这层给出了神经网络最终的输出结果。同样,输出结果也是一个实现了MLData接口的类,大多数神经网络返回的输出类是一个BasicMLData,从MLData中我们也可以得到一个doube数组。 -
隐藏层
在前面的讨论中,神经网络包含了输入层和输出时,有时候,输出层和输入层是相同的,但是大多数通常是两个单独的层,此外,在输入层和输出层之间也许存在其他的层,这层被称为隐藏层,隐藏层在输入层和输出层之间。隐藏层也可以承担更多复杂的结构。
隐藏层唯一的目标是让神经网络更好的为给定的输入产生预期的输出,神经网络编程首先涉及到的是定义输入层和输出层神经元个数,然后在定义隐藏层。
隐藏层是一个非常大的“黑盒子”,怎样创建一个隐藏层结构,要达到不要太简单,也不要太复杂,太简单的隐藏层结构将学习不精,太复杂的隐藏层结构也要花太多数据和时间去训练,通常是一个单一的隐藏层神经元数目等于输入层的两倍(这个不一定对,但可以先试试),在根据神经网络的性能,在适当增加或者减少隐藏层神经元的数量。
如何确定神经元层数
- 构造神经网络
构建一个神经网络特别简单,一般网络都能指定激活函数、偏置神经元、神经元个数,一般激活函数也都为ActivationSigmoid, 有偏置神经元。
偏执神经元影响的是下一层,而激活函数影响的是前一层的数据。所以一般第一层(输入层)不需要激活函数,最后一层(输出层)不需要偏置神经元。
未完待续写。。