private void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e) { var psdFileReader = new PreprocessedStockDataFileReader(acorFileLabel.Text); var inputData = psdFileReader.GetInputData(); var outputData = psdFileReader.GetDesiredOutputData(); var datesData = psdFileReader.GetDates(); int examples = _lengthOfPrediction + (_windowWidth - 1); int predictionsCnt = examples - (_windowWidth - 1); double[][] predictions = new double[predictionsCnt][]; string[] dates = new string[predictionsCnt]; int predictionsCalculated = 0; int offset = _startDayIndex + _windowWidth; BackgroundWorker worker = sender as BackgroundWorker; Parallel.For(0, predictionsCnt, i => { var inSlice = inputData.SubArray(i + _startDayIndex, _windowWidth); var outSlice = outputData.SubArray(i + _startDayIndex, _windowWidth); var trainer = _trainerFactory.GetTrainer(); trainer.Initialize(inSlice, outSlice); trainer.TrainNeuralNetwork(); double[] predictionExample = inputData[i + offset]; double accual = outputData[i + offset]; double prediction = trainer.AskNeuralNetwork(predictionExample); predictions[i] = new double[] { accual, prediction, trainer.BestFittness() }; dates[i] = datesData[i + offset]; Interlocked.Increment(ref predictionsCalculated); worker.ReportProgress((predictionsCalculated*100)/predictionsCnt); }); Program.SavePredictions(_outputFilename, predictions, dates); }
private static void GeneratePredictionsSequential(string filename, int windowWidth = 7) { _psdFileReader = new PreprocessedStockDataFileReader(filename); var inputData = _psdFileReader.GetInputData(); var outputData = _psdFileReader.GetDesiredOutputData(); var datesData = _psdFileReader.GetDates(); int examples = _howManyDaysToPredict + (windowWidth - 1); int predictionsCnt = examples - (windowWidth - 1); double[][] predictions = new double[predictionsCnt][]; string[] dates = new string[predictionsCnt]; int offset = _startDayIndex + windowWidth; //for (int i = windowWidth - 1; i < inputData.Length - 1; i++) // for(int i = windowWidth - 1 + _startDayIndex; i < examples +_startDayIndex; i++) for(int i=0; i < predictionsCnt; i++) { var inSlice = inputData.SubArray(i + _startDayIndex, windowWidth); var outSlice = outputData.SubArray(i + _startDayIndex, windowWidth); var trainer = _trainerFactory.GetTrainer(); trainer.Initialize(inSlice, outSlice); trainer.TrainNeuralNetwork(); double[] predictionExample = inputData[i + offset]; double accual = outputData[i + offset]; double prediction = trainer.AskNeuralNetwork(predictionExample); predictions[i] = new double[] { accual, prediction, trainer.BestFittness() }; dates[i] = datesData[i + offset]; } SavePredictions(_predictionOutputFilename, predictions, dates); }