/// <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;
        }
Beispiel #3
0
 /// <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;
            }
        }
Beispiel #7
0
        /// <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;
            }
        }
Beispiel #8
0
        /// <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)
 {
 }
Beispiel #12
0
 /// <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;
        }