训练完后,神经网络的预测是不是直接从输入层向前传播到输出层就实现了?

After training, is the prediction of the neural network achieved by just forward propagating from input to output layer?

我在matlab中做了一个简单的前馈神经网络如下:

mynet = feedforwardnet(5)
mynet.layers{1}.transferFcn = 'poslin'; % one hidden layer(5 neurons) with poslin = ReLU activation function
mynet.layers{2}.transferFcn = 'purelin'; % last layer has simply linear activation function 

我想训练这个神经网络来学习一个如下所示的非线性函数: Original function。所以基本上这是一个回归问题。我们有两个输入(u1,u2)和一个输出(y)。

神经网络已经训练好,现在要估计输出,我们可以简单地做:

input = [3;2] % u1 = 3, u2 = 2
y_predicted = mynet([input]) % gives the output for a input

这给出 y_predicted = 2.9155。好的,没关系。预测很好(因为,y_true = 3)。但是我不明白这个值是怎么来的

然后当我通过正向传播手动检查它时,我得到了不同的结果。 也就是说,我在训练后提取了最终的权重和偏差:

W1 = mynet.IW{1,1}; b1 = mynet.b{1}; W2 = mynet.LW{2,1}; b2 = mynet.b{2}

然后做正向传播:

Z1 = W1*[3; 2] + b1; 
A1 = poslin(Z1); % applying ReLU activation function 
Z2 = W2*A1 + b2;
A2 = Z2; % linear activation function
y_predicted = A2;

现在我得到 (y_predicted = 2.2549)。这不是一个很好的预测,但我知道这个值是怎么来的。

两个预测值不应该相同吗?我错过了什么吗?

y_predicted = 2.9155

不是度量标准(因此不是准确性)。这是您的模型估计的数字。如果你试图逼近某个函数,那么你需要计算 Mean squared error 或根 mean squared error。假设您的输入值为 3(在本例中为 y_true = 3),您的预测值为 2.9155,然后是 MSE = 0.00714。因此,如果 MSE 较低,那么您的模型将更好地逼近函数。

现在回答您的问题:在训练期间,反向传播用于纠正由于这些权重引起的 weights/errors。但是,在 testing/predicting 阶段我们不调整权重。因此,这只是向前迈出的一步。

准确率永远不能高于1。它是一个介于0和1之间的值,用于分类情况。您正在使用回归,并且需要如上所述计算 MSE。 MSE 越低,您的模型越好。

这是由于输入和输出的预处理而发生的,当您在 Matlab 中创建前馈网络时,默认情况下会发生这种情况。所以在手动检查的时候,我们没有考虑到这一点,直接给出了原始数据。

Reference

通过以下方式停用它们后问题已解决:

mynet.input.processFcns = {}; 
mynet.output.processFcns = {};