我在测试数据集上使用CalculateGradients()
(source)(占我数据的30%)。请参阅下面的代码。
目标是使用testingDataSet
计算的参数(70%的数据)在trainingDataSet
上获取错误。
我的问题:CalculateGradients()
是否独立? (因此只允许我按预期计算错误),或者是否在共享network
中添加了另一个迭代,从而破坏了#34;培训数据集的隔离"?
此处Iteration()
的源代码:source。
代码:
public void Train(BasicNetwork network, IMLDataSet trainingDataSet, IMLDataSet testingDataSet)
{
var trainPropagation = new ResilientPropagation(network, trainingDataSet);
var testPropagation = new ResilientPropagation(network, testingDataSet);
var epoch = 1;
do
{
trainPropagation.Iteration();
// !!! Trying to calculate the error on `testingDataSet` using the parameters from `trainPropagation`
testPropagation.CalculateGradients();
Console.WriteLine($"Epoch #{epoch}, Train error: {trainPropagation.Error}, Test error: {testPropagation.Error}" );
if (double.IsNaN(trainPropagation.Error))
throw new Exception("Train error was NaN");
epoch++;
} while (trainPropagation.Error > _maxError);
}