/// <summary> /// Init the process. /// </summary> /// private void Init() { // fix flat spot, if needed _flatSpot = new double[_flat.ActivationFunctions.Length]; if (FixFlatSpot) { for (int i = 0; i < _flat.ActivationFunctions.Length; i++) { IActivationFunction af = _flat.ActivationFunctions[i]; if (af is ActivationSigmoid) { _flatSpot[i] = 0.1; } else { _flatSpot[i] = 0.0; } } } else { EngineArray.Fill(_flatSpot, 0.0); } var determine = new DetermineWorkload( _numThreads, (int)_indexable.Count); _workers = new GradientWorker[determine.ThreadCount]; int index = 0; // handle CPU foreach (IntRange r in determine.CalculateWorkers()) { _workers[index++] = new GradientWorker(((FlatNetwork)_network.Flat.Clone()), this, _indexable.OpenAdditional(), r.Low, r.High, _flatSpot, ErrorFunction); } InitOthers(); }
/// <summary> /// Init the process. /// </summary> /// private void Init() { // fix flat spot, if needed _flatSpot = new double[_flat.ActivationFunctions.Length]; if (FixFlatSpot) { for (int i = 0; i < _flat.ActivationFunctions.Length; i++) { IActivationFunction af = _flat.ActivationFunctions[i]; if( af is ActivationSigmoid ) { _flatSpot[i] = 0.1; } else { _flatSpot[i] = 0.0; } } } else { EngineArray.Fill(_flatSpot, 0.0); } var determine = new DetermineWorkload( _numThreads, (int)_indexable.Count); _workers = new GradientWorker[determine.ThreadCount]; int index = 0; // handle CPU foreach (IntRange r in determine.CalculateWorkers()) { _workers[index++] = new GradientWorker(((FlatNetwork)_network.Flat.Clone()), this, _indexable.OpenAdditional(), r.Low, r.High, _flatSpot, ErrorFunction); } InitOthers(); }