/// <inheritdoc/> public override void Init(BasicNetwork theNetwork, IMLDataSet theTraining) { base.Init(theNetwork, theTraining); int weightCount = theNetwork.Structure.Flat.Weights.Length; training = theTraining; network = theNetwork; hessianMatrix = new Matrix(weightCount, weightCount); hessian = hessianMatrix.Data; // create worker(s) var determine = new DetermineWorkload( _numThreads, (int)training.Count); _workers = new ChainRuleWorker[determine.ThreadCount]; int index = 0; // handle CPU foreach (IntRange r in determine.CalculateWorkers()) { _workers[index++] = new ChainRuleWorker((FlatNetwork)flat.Clone(), training.OpenAdditional(), r.Low, r.High); } }
/// <inheritdoc /> private void Init() { DetermineWorkload determine = new DetermineWorkload( this.numThreads, (int)this.indexable.Count); this.workers = new IFlatGradientWorker[determine.ThreadCount]; int index = 0; /* foreach */ // handle CPU foreach (IntRange r in determine.CalculateWorkers()) { this.workers[index++] = new GradientWorkerCPU(((FlatNetwork)this.network.Clone()), this, this.indexable.OpenAdditional(), r.Low, r.High); } }
/// <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(); }