这是个相当奇怪的问题。
A有一个反向传播代码,其工作原理非常完美,如下所示:

现在,当我进行批量学习时,我得到了错误的结果,即使它只是一个简单的标量函数近似。
经过培训,网络对所有输入模式产生几乎相同的输出。
在这一刻,我已经尝试过:
我注意到,在对一种模式进行了大量的反向传播之后,网络为大量的输入产生了几乎相同的输出。
当我试图逼近一个函数时,我总是只得到一行(几乎是一条线)。如下所示:

相关问题:Neural Network Always Produces Same/Similar Outputs for Any Input和增加偏置神经元的建议并没有解决我的问题。
我找到了这样的职位:
When ANNs have trouble learning they often just learn to output the
average output values, regardless of the inputs. I don't know if this
is the case or why it would be happening with such a simple NN.这足以说明我的处境。但该如何处理呢?
我的结论是,我所遇到的情况是有权利的。实际上,对于每一种网络配置,您可能只需将所有连接“剪切”到输出层。这实际上是可能的,例如,通过将所有隐藏的权重设置为接近零,或者将偏差设置在一些疯狂的值上,以使过饱和隐藏层,并使输出独立于输入。在此之后,我们可以自由地调整输出层,以便只复制输出,因为它独立于输入。在批量学习中,所发生的情况是梯度平均,而网络只复制目标的平均值。输入不起任何作用。
发布于 2015-05-02 05:24:13
我的答案不能完全准确,因为你还没有发布perceptron(...)和backpropagation(...)函数的内容。
但是根据我的猜测,您在一个数据上对您的网络进行了多次培训,然后在一个循环for data in training_data中对另一个数据进行了完全的训练,这导致您的网络只记住最后一个数据。相反,尝试在每个数据上对您的网络进行一次培训,然后多次这样做(反转嵌套循环的顺序)。
换句话说,for I = 1:number of patterns循环应该在backpropagation(...)函数的循环中,因此这个函数应该包含两个循环。
示例(在C#中):
这里是反向传播函数的一些部分,我在这里简化了它。在每次更新权重和偏差时,整个网络都会被“传播”。在这个网址上可以找到以下代码:https://visualstudiomagazine.com/articles/2015/04/01/back-propagation-using-c.aspx
public double[] Train(double[][] trainData, int maxEpochs, double learnRate, double momentum)
{
//...
Shuffle(sequence); // visit each training data in random order
for (int ii = 0; ii < trainData.Length; ++ii)
{
//...
ComputeOutputs(xValues); // copy xValues in, compute outputs
//...
// Find new weights and biases
// Update weights and biases
//...
} // each training item
}可能不起作用的是,您只想在这个注释之后(以Batch learn为例)将所有内容都包含在第二个for循环中,以完成多个学习阶段:
%--------------------------------------------------------------------------
%% Get all updateshttps://stackoverflow.com/questions/29973691
复制相似问题