我开始使用神经网络。我已经调整了为我自己的目的提供的XOR示例,但是当我运行它时,错误永远不会改变。
我尝试近似的函数需要4个双精度并输出1个双精度,4个输入总是正数,输出可以是负数或正数(多数是正数)。对于初学者,我使用50条记录来训练数据。
工作XOR(每次迭代时错误都会下降)
public static double[][] XORInput = {
new[] {0.0, 0.0},
new[] {1.0, 0.0},
new[] {0.0, 1.0},
new[] {1.0, 1.0}
};
public static double[][] XORIdeal = {
new[] {0.0},
new[] {1.0},
new[] {1.0},
new[] {0.0}
};
BasicNetwork network = new BasicNetwork();
network.AddLayer(new BasicLayer(null, true, 2));
network.AddLayer(new BasicLayer(new ActivationSigmoid(), true, 3));
network.AddLayer(new BasicLayer(new ActivationSigmoid(), false, 1));
network.Structure.FinalizeStructure();
network.Reset();
IMLDataSet trainingData = new BasicMLDataSet(XORInput, XORIdeal);
IMLTrain train = new ResilientPropagation(Network, trainingData);
不工作(错误永不停止):
BasicNetwork network = new BasicNetwork();
network.AddLayer(new BasicLayer(null, true, 4));
network.AddLayer(new BasicLayer(new ActivationSigmoid(), true, 6));
network.AddLayer(new BasicLayer(new ActivationSigmoid(), false, 1));
network.Structure.FinalizeStructure();
network.Reset();
IMLDataSet trainingData = new BasicMLDataSet(myInput, myExpectedOutput);
IMLTrain train = new ResilientPropagation(Network, trainingData);
培训数据的一些样本记录:
Input:
2.54, 3.15, 3.4, 1.73
5.3, 1.78, 3.9, 2.04
1.71, 5.4, 4.3, 2.26
1.62, 6.4, 4, 1.89
1.45, 8.4, 5.2, 2.14
Output:
5.59
11.05
6.89
10.4
-0.56
我认为问题在于激活功能不会被触发。我认为这可能是因为ActivationSigmoid()不适合这个问题,但我尝试使用完全相同的ActivationTANH()。
答案 0 :(得分:3)
问题是我的价值观没有正常化。
要使用激活功能,所有输入和输出必须介于1和0(ActivationSigma)以及-1和1(ActivationTANH)之间。您需要一些函数来将值标准化到它们所需的范围。
这个链接对我很有帮助: