private void Step(Item sample)
        {
            var x = sample.Volume;
            var y = sample.Label;    // pego o rótulo e a imagem

            if (sample.IsValidation) // vejo se é de validação ou treino
            {
                // a estimação do erro é feita com os dados de entrada 'x' e a previsão boa ou ruim é 'valAcc'
                net.Forward(x);
                var yhat   = net.GetPrediction();
                var valAcc = yhat == y ? 1.0 : 0.0;
                valAccWindow.Add(valAcc);
                return;
            }

            trainer.Train(x, y);
            var lossx = trainer.CostLoss;
            var lossw = trainer.L2DecayLoss;
            //  erro e a função perda
            var prediction = net.GetPrediction();
            var trainAcc   = prediction == y ? 1.0 : 0.0;

            xLossWindow.Add(lossx);
            wLossWindow.Add(lossw);
            trainAccWindow.Add(trainAcc);

            if (stepCount % 200 == 0)
            {
                if (xLossWindow.Count == xLossWindow.Capacity)
                {
                    var xa   = xLossWindow.Items.Average();
                    var xw   = wLossWindow.Items.Average();
                    var loss = xa + xw;
                    Console.WriteLine("Perda: {0} precisão no treiono: {1}% precisão do teste: {2}%", loss, Math.Round(trainAccWindow.Items.Average() * 100.0, 2), Math.Round(valAccWindow.Items.Average() * 100.0, 2));
                    Console.WriteLine("{0} exemplos vistos. tempo pro fwd: {1}ms tempo pro bckw: {2}ms", stepCount, Math.Round(trainer.ForwardTime.TotalMilliseconds, 2), Math.Round(trainer.BackwardTime.TotalMilliseconds, 2));
                    // AQUI, salvo A REDE ATUAl, POSSO ESCOLHER MAIS TARDE qual usar
                    // a melhor rede atual está salva com o nome de 'best' na pasta debug
                    File.WriteAllText("rede" + stepCount.ToString(), SerializationExtensions.ToJSON(net));
                }
            }

            if (stepCount % 1000 == 0)
            {
                TestPredict();
            }
            stepCount++;
        }