void TrainLoop() { int[] inputs = new int[_network.InputLength]; int output = _rand.Next() % _network.OutputLength; for (int i = 0; i < inputs.Length; i++) { inputs [i] = _rand.Next() % 100; } inputs[0] = _rand.Next() % 2; if (inputs [0] > 0.5) { output = 0; } _network.Train(inputs, output, null, 0.005f); _loopsCount++; CompositionRoot.Instance.ExecuteInMainThread(() => { _loopsCountLabel.text = _loopsCount.ToString(); }); }
public void OnToggleTrainPressed() { _isTraining = !_isTraining; if (!_isTraining) { return; } // Train thread. Thread thread = new Thread(new ThreadStart(() => { while (_isTraining) { TrainingDecisionModel currTraining = _trainingModels[_trainingsCount % _trainingModels.Count]; float currSpeed = 0.0005f; //*currTraining.RewardPercent*0.01f; _decider.Train(currTraining.Inputs, currTraining.Output, currTraining.Options, currSpeed); _trainingsCount++; CompositionRoot.Instance.ExecuteInMainThread(() => { _performedTrainingsCount.text = _trainingsCount.ToString(); }); } })); thread.Start(); // Calc success thread. Thread thread2 = new Thread(new ThreadStart(() => { while (_isTraining) { float error = GetError(); System.Threading.Thread.Sleep(300); CompositionRoot.Instance.ExecuteInMainThread(() => { _error.text = error.ToString("00.0000"); Debug.Log("success updated, success = " + error.ToString()); }); } })); thread2.Start(); }