我在Matlab中训练了一个前馈神经网络。现在我必须用C语言实现这个神经网络(或者使用数学方程式在Matlab中模拟模型,而不使用直接函数)。我怎么做?我知道我必须采取权重和偏见和激活功能。还需要什么?
答案 0 :(得分:1)
将它表示为数学函数是没有意义的,因为它不会为您节省任何计算。
确实,您所需要的只是权重,偏见,激活和您的架构。我假设它是一个简单的前馈网络,你需要在C中实现某种矩阵乘法和加法。此外,你需要实现激活函数。在那之后,你准备好了。您的前馈NN已准备好实施。如果C代码不会用于训练,那么在C中实现反向传播算法就没有必要。
前馈层将按如下方式实现:
输出= Activation_function(输入*权重+偏见)
其中,
输入 :( 1 x number_of_input_parameters_for_this_layer)
权重 :( number_of_input_parameters_for_this_layer x number_of_neurons_for_this_layer)
偏见 :( 1 x number_of_neurons_for_this_layer)
输出 :( 1 x number_of_neurons_for_this_layer)
图层的输出是下一层的输入。
答案 1 :(得分:0)
经过几天的搜索,我发现以下网页非常实用http://ufldl.stanford.edu/tutorial/supervised/MultiLayerNeuralNetworks/
下图显示了一个简单的前馈神经网络。图片来自上述网站。
在此图中,圆圈表示网络的输入。标记为“+1”的圆圈称为偏差单位,并且对应于截距项。网络的最左边的层称为输入图层,最右边的图层称为输出图层(在此示例中,只有一个节点)。中间层节点称为隐藏层,因为在训练集中未观察到其值。在这个例子中,神经网络有3个输入单元(不计算偏置单元),3个隐藏单元和1个输出单元。
这个神经网络的参数( W,b )=(W (l),b (l),W (2),b (2)),其中我们写W ij ( l )表示与层 l 中单元 j 之间的连接关联的参数(或权重),以及单位 i 在图层 l + 1 中。 (注意索引的顺序。)另外,b i ( l )是与单位 i 在图层 l + 1 。
所以,从训练有素的模型中,正如Mido在答案中提到的那样,我们必须采用输入权重矩阵,即 W (1) ,层权重矩阵, W (2) ,偏差,隐藏层传递函数和输出层传递函数。在此之后,使用上面的等式来估计输出 h W,b (x)。用于回归问题的常用传递函数是隐藏层中的tan-Sigmoid传递函数和输出层中的线性传递函数。
使用Matlab的人,这些链接非常有用