我如何采用经过训练的神经网络并在另一个系统中实施?

时间:2016-01-08 09:05:48

标签: matlab machine-learning neural-network

我在Matlab中训练了一个前馈神经网络。现在我必须用C语言实现这个神经网络(或者使用数学方程式在Matlab中模拟模型,而不使用直接函数)。我怎么做?我知道我必须采取权重和偏见和激活功能。还需要什么?

2 个答案:

答案 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/

下图显示了一个简单的前馈神经网络。图片来自上述网站。

A simple feedforward neural network

在此图中,圆圈表示网络的输入。标记为“+1”的圆圈称为偏差单位,并且对应于截距项。网络的最左边的层称为输入图层,最右边的图层称为输出图层(在此示例中,只有一个节点)。中间层节点称为隐藏层,因为在训练集中未观察到其值。在这个例子中,神经网络有3个输入单元(不计算偏置单元),3个隐藏单元和1个输出单元。

代表这个前馈网络的数学方程式是 Mathematical Equations

这个神经网络的参数 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的人,这些链接非常有用

try to simulate neural network in Matlab by myself

Neural network in MATLAB

Programming a Basic Neural Network from scratch in MATLAB