/// <summary> /// Construct a trainer for flat networks to use the Manhattan update rule. /// </summary> /// /// <param name="network">The network to train.</param> /// <param name="training">The training data to use.</param> /// <param name="learningRate">The learning rate to use.</param> public TrainFlatNetworkManhattan(FlatNetwork network, IEngineDataSet training, double learningRate) : base(network, training) { this.learningRate = learningRate; this.zeroTolerance = RPROPConst.DEFAULT_ZERO_TOLERANCE; }
/// <summary> /// Construct the training object. /// </summary> /// /// <param name="network">The network to train.</param> /// <param name="training">The training data to use.</param> public TrainFlatNetworkSCG(FlatNetwork network, IEngineDataSet training) : base(network, training) { this.success = true; this.success = true; this.delta = 0; this.lambda2 = 0; this.lambda = TrainFlatNetworkSCG.FIRST_LAMBDA; this.oldError = 0; this.magP = 0; this.restart = false; this.weights = EngineArray.ArrayCopy(network.Weights); int numWeights = this.weights.Length; // this.gradients = new double[numWeights]; this.oldWeights = new double[numWeights]; this.oldGradient = new double[numWeights]; this.p = new double[numWeights]; this.r = new double[numWeights]; this.shouldInit = true; }
/// <summary> /// Construct a trainer for flat networks to use the Manhattan update rule. /// </summary> /// /// <param name="network">The network to train.</param> /// <param name="training">The training data to use.</param> /// <param name="learningRate">The learning rate to use.</param> public TrainFlatNetworkManhattan(FlatNetwork network, IEngineDataSet training, double learningRate) : base(network, training) { this.learningRate = learningRate; this.zeroTolerance = RPROPConst.DEFAULT_ZERO_TOLERANCE; }
/// <summary> /// Construct a backprop trainer for flat networks. /// </summary> /// /// <param name="network">The network to train.</param> /// <param name="training">The training data.</param> /// <param name="learningRate">The learning rate.</param> /// <param name="momentum">The momentum.</param> public TrainFlatNetworkBackPropagation(FlatNetwork network, IEngineDataSet training, double learningRate, double momentum) : base(network, training) { this.momentum = momentum; this.learningRate = learningRate; this.lastDelta = new double[network.Weights.Length]; }
/// <summary> /// Construct a backprop trainer for flat networks. /// </summary> /// /// <param name="network">The network to train.</param> /// <param name="training">The training data.</param> /// <param name="learningRate">The learning rate.</param> /// <param name="momentum">The momentum.</param> public TrainFlatNetworkBackPropagation(FlatNetwork network, IEngineDataSet training, double learningRate, double momentum) : base(network, training) { this.momentum = momentum; this.learningRate = learningRate; this.lastDelta = new double[network.Weights.Length]; }
/// <summary> /// Construct a resilient trainer for flat networks. /// </summary> /// /// <param name="network">The network to train.</param> /// <param name="training">The training data to use.</param> /// <param name="zeroTolerance">How close a number should be to zero to be counted as zero.</param> /// <param name="initialUpdate">The initial update value.</param> /// <param name="maxStep">The maximum step value.</param> public TrainFlatNetworkResilient(FlatNetwork network, IEngineDataSet training, double zeroTolerance, double initialUpdate, double maxStep) : base(network, training) { this.updateValues = new double[network.Weights.Length]; this.zeroTolerance = zeroTolerance; this.maxStep = maxStep; for (int i = 0; i < this.updateValues.Length; i++) { this.updateValues[i] = initialUpdate; } }
/// <summary> /// Construct a resilient trainer for flat networks. /// </summary> /// /// <param name="network">The network to train.</param> /// <param name="training">The training data to use.</param> /// <param name="zeroTolerance">How close a number should be to zero to be counted as zero.</param> /// <param name="initialUpdate">The initial update value.</param> /// <param name="maxStep">The maximum step value.</param> public TrainFlatNetworkResilient(FlatNetwork network, IEngineDataSet training, double zeroTolerance, double initialUpdate, double maxStep) : base(network, training) { this.updateValues = new double[network.Weights.Length]; this.zeroTolerance = zeroTolerance; this.maxStep = maxStep; for (int i = 0; i < this.updateValues.Length; i++) { this.updateValues[i] = initialUpdate; } }
/// <summary> /// Train a flat network multithreaded. /// </summary> /// /// <param name="network">The network to train.</param> /// <param name="training">The training data to use.</param> public TrainFlatNetworkProp(FlatNetwork network, IEngineDataSet training) { if (!(training is IEngineIndexableSet)) { throw new EncogEngineError( "Training data must be Indexable for this training type."); } this.training = training; this.network = network; this.gradients = new double[this.network.Weights.Length]; this.lastGradient = new double[this.network.Weights.Length]; this.indexable = (IEngineIndexableSet)training; this.numThreads = 0; this.reportedException = null; }
/// <summary> /// Train a flat network multithreaded. /// </summary> /// /// <param name="network">The network to train.</param> /// <param name="training">The training data to use.</param> /// <param name="profile">The OpenCL training profile.</param> public TrainFlatNetworkOpenCL(FlatNetwork network, IEngineDataSet training, OpenCLTrainingProfile profile) { (new ValidateForOpenCL()).Validate(network); if (!(training is IEngineIndexableSet)) { throw new EncogEngineError( "Training data must be Indexable for this training type."); } if (EncogEngine.Instance.CL == null) { throw new EncogEngineError( "You must enable OpenCL before using this training type."); } this.profile = profile; this.network = network; this.training = (IEngineIndexableSet)training; }
/// <summary> /// Construct the training object. /// </summary> /// /// <param name="network">The network to train.</param> /// <param name="training">The training data to use.</param> public TrainFlatNetworkSCG(FlatNetwork network, IEngineDataSet training) : base(network, training) { this.success = true; this.success = true; this.delta = 0; this.lambda2 = 0; this.lambda = TrainFlatNetworkSCG.FIRST_LAMBDA; this.oldError = 0; this.magP = 0; this.restart = false; this.weights = EngineArray.ArrayCopy(network.Weights); int numWeights = this.weights.Length; // this.gradients = new double[numWeights]; this.oldWeights = new double[numWeights]; this.oldGradient = new double[numWeights]; this.p = new double[numWeights]; this.r = new double[numWeights]; this.shouldInit = true; }
/// <summary> /// Tran a network using RPROP. /// </summary> /// /// <param name="flat">The network to train.</param> /// <param name="trainingSet">The training data to use.</param> public TrainFlatNetworkResilient(FlatNetwork flat, IEngineDataSet trainingSet) : this(flat, trainingSet, RPROPConst.DEFAULT_ZERO_TOLERANCE, RPROPConst.DEFAULT_INITIAL_UPDATE, RPROPConst.DEFAULT_MAX_STEP) { }
/// <summary> /// Tran a network using RPROP. /// </summary> /// /// <param name="flat">The network to train.</param> /// <param name="trainingSet">The training data to use.</param> public TrainFlatNetworkResilient(FlatNetwork flat, IEngineDataSet trainingSet) : this(flat, trainingSet, RPROPConst.DEFAULT_ZERO_TOLERANCE, RPROPConst.DEFAULT_INITIAL_UPDATE, RPROPConst.DEFAULT_MAX_STEP) { }
/// <summary> /// Train a flat network multithreaded. /// </summary> /// /// <param name="network">The network to train.</param> /// <param name="training">The training data to use.</param> public TrainFlatNetworkProp(FlatNetwork network, IEngineDataSet training) { if (!(training is IEngineIndexableSet)) { throw new EncogEngineError( "Training data must be Indexable for this training type."); } this.training = training; this.network = network; this.gradients = new double[this.network.Weights.Length]; this.lastGradient = new double[this.network.Weights.Length]; this.indexable = (IEngineIndexableSet)training; this.numThreads = 0; this.reportedException = null; }
/// <summary> /// Train a flat network multithreaded. /// </summary> /// /// <param name="network">The network to train.</param> /// <param name="training">The training data to use.</param> /// <param name="profile">The OpenCL training profile.</param> public TrainFlatNetworkOpenCL(FlatNetwork network, IEngineDataSet training, OpenCLTrainingProfile profile) { (new ValidateForOpenCL()).Validate(network); if (!(training is IEngineIndexableSet)) { throw new EncogEngineError( "Training data must be Indexable for this training type."); } if (EncogEngine.Instance.CL == null) { throw new EncogEngineError( "You must enable OpenCL before using this training type."); } this.profile = profile; this.network = network; this.training = (IEngineIndexableSet)training; }