public override void TrainDense(IDataset ds)
{
int nclasses = ds.nClasses();
float miters = PGetf("miters");
int niters = (int)(ds.nSamples() * miters);
niters = Math.Max(1000, Math.Min(10000000,niters));
double err = 0.0;
Floatarray x = new Floatarray();
Floatarray z = new Floatarray();
Floatarray target = new Floatarray(nclasses);
int count = 0;
for (int i = 0; i < niters; i++)
{
int row = i % ds.nSamples();
ds.Output(target, row);
ds.Input1d(x, row);
TrainOne(z, target, x, PGetf("eta"));
err += NarrayUtil.Dist2Squared(z, target);
count++;
}
err /= count;
Global.Debugf("info", " {4} n {0} niters={1} eta={2:0.#####} errors={3:0.########}",
ds.nSamples(), niters, PGetf("eta"), err, FullName);
}