[英]Artificial Neural Network training with 6 features
我想问以下问题:我正在尝试使用反向传播训练人工神经网络。 我有一个前馈神经网络,其中隐藏了6个输入层和1个输出。 我将给这个神经网络一个由6个特征组成的特征向量并对其进行训练,我的学习率是0.7,动量是0.9。 我想根据我的6个功能在2个类别中进行分类。 问题是该网络的总体误差不会改变...我尝试了不同的学习率和动量值,但问题仍然相同...我不明白为什么这样做会失败。 当我尝试学习ann来学习xor问题时,我尝试了相同的代码(我的意思是主类),并且在那儿工作得很好。 有谁知道为什么会这样吗? 感谢您的时间 :)
FeedforwardNetwork network = new FeedforwardNetwork();
Train train;
network.AddLayer(new FeedforwardLayer(6));
network.AddLayer(new FeedforwardLayer(7));
network.AddLayer(new FeedforwardLayer(1));
train = new Backpropagation(network, Input_vector, Ideal_vector, 0.7, 0.8);
int epoch = 1;
textBox7.Text = " It has begun\r\n";
do
{
train.Iteration();
textBox7.Text += "\r\n Epoch " + epoch + " Error " + train.Error + " \r\n ";
epoch++;
}
while ((epoch < 500) && (train.Error > 0.001));
network = train.Network;
textBox7.Text += "Neural Network Results";
for (int i = 0; i < Ideal_vector.Length; i++)
{
double[] actual = network.ComputeOutputs(Input_vector[i]);
textBox7.Text += "\r\n" + Input_vector[i][0] + "," + Input_vector[i][1] + "," +
Input_vector[i][2] + "," + Input_vector[i][3] + Input_vector[i][4] +
Input_vector[i][5] + " actual= " +
actual[0] + ", ideal " + Ideal_vector[i][0] + " \r\n";
}
您正在使用批处理学习还是在线学习? 如果答案是批量的,那么您的学习率可能会太高。 您可以尝试按比例缩放除以训练模式的数量。 正如@Marcom所说,如果您的神经元太少,您的网络容量就会太低,这有点难以解释,但是基本上您不是在使用神经元的非线性区域,而且您的网络是有偏差的。
检查这里以获得更好的解释。
首先尝试使用大量的神经元,然后只要错误不断减少,就可以减少神经元的数目。
尝试添加额外的隐藏层,并尝试增加隐藏节点的数量。 我无法为您提供技术上的解释,但是如果节点太少,则ann可能无法收敛。
您的主要功能很好。 但是,您的训练向量或反向传播代码都不是(假设您的网络足够大,可以学习此知识)。 因此,这将是一堆问题而不是答案,但是您可能会得到正确的想法:
MLP最初没有发展的损失函数通常是因为网络无法推断出适合您的训练数据的任何规则(反向支撑的等级找不到任何有意义的局部最小值)。 这可能是由于您要解决的问题的数据不足或体系结构受限制所致。
增加层数和/或它们的大小应该可以改变这种情况。 尽管如果您的体系结构过于复杂,则很容易过度拟合。 您将必须找到适合您问题的平衡点。
而且不要一开始就从低学习率开始,设置得太高会导致您的梯度“反弹”并且不会收敛。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.