/// <summary>
        /// Begin training, and continue until one or more termination conditions are reached.
        /// </summary>
        private void StartTraining()
        {
            IsTraining = true;
            epochCount = 0;
            evaluations.Clear();

            initialiser.Initialise(Network);

            gradients = new FeedForwardLayer.Gradient[Network.Layers.Count];
            for (int i = 0; i < Network.Layers.Count; i++)
            {
                if (LayerIsDense(i))
                {
                    gradients[i] = new FeedForwardLayer.Dense.Gradient(
                        (FeedForwardLayer.Dense)Network.Layers[i]); // Can safely be cast
                }
                if (LayerIsSparse(i))
                {
                    gradients[i] = new FeedForwardLayer.Sparse.Gradient(
                        (FeedForwardLayer.Sparse)Network.Layers[i]); // Can safely be cast
                }
            }

            while (!IsFinished())
            {
                if (epochCount % evaluationFrequency == 0)
                {
                    evaluations.Add(EvaluateNetwork());
                }
                PerformEpoch();
            }

            IsTraining = false;
        }
Example #2
0
        private void InitialiseNetwork(IComputationHandler handler, out int initialisedNumberCount, out int initialisedNDArrayCount)
        {
            Network.Initialise(handler);

            initialisedNDArrayCount = 0;
            initialisedNumberCount  = 0;

            RegistryResolver networkResolver = new RegistryResolver(Network.Registry.Get <IRegistry>("layers"));
            List <string>    orderedInitialiserIdentifiers = _initialisers.Keys.ToList();

            orderedInitialiserIdentifiers.Sort(RegistryUtils.CompareIdentifierSpecificityAscending);

            foreach (string identifier in orderedInitialiserIdentifiers)
            {
                object[]     values      = networkResolver.ResolveGet(identifier, new object[0]);
                IInitialiser initialiser = _initialisers[identifier];

                foreach (object value in values)
                {
                    INDArray array = value as INDArray;

                    if (array != null)
                    {
                        initialiser.Initialise(array, handler, Sigma.Random);
                        initialisedNDArrayCount++;
                    }
                    else
                    {
                        INumber number = value as INumber;

                        if (number != null)
                        {
                            initialiser.Initialise(number, handler, Sigma.Random);
                            initialisedNumberCount++;
                        }
                    }
                }
            }
        }
 void Init(IInitialiser initialiser)
 {
     _store = initialiser.Initialise();
 }
Example #4
0
 public static void Initalise()
 {
     _initialiser.Initialise();
 }