/// <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 /> 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( ThreadCount, _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); } }
/// <summary> /// Open an additional dataset. /// </summary> /// <returns>The dataset.</returns> public IMLDataSet OpenAdditional() { var folded = new FoldedDataSet(_underlying.OpenAdditional()) { Owner = this }; return(folded); }
/// <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(); }