/// <summary> /// Runs the train on batch. /// </summary> /// <param name="i">The i.</param> /// <param name="x">The x.</param> /// <param name="y">The y.</param> private void RunTrainOnBatch(int i, SuperArray x, SuperArray y) { SuperArray pred = Forward(x); SuperArray lossVal = LossFn.Forward(pred, y); SuperArray grad = LossFn.Backward(pred, y).Reshape(-1, 1); lossVal = ApplyRegularizer(lossVal); var metricVal = MetricFn.Calc(pred, y); train_losses.Add(Ops.Mean(lossVal)); train_metrics.Add(Ops.Mean(metricVal)); Backward(grad); ApplyDeltaRegularizer(); foreach (var layer in Layers) { OptimizerFn.Update(i, layer); } pred.Dispose(); lossVal.Dispose(); grad.Dispose(); }