/// <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; }
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(); }
public static void Initalise() { _initialiser.Initialise(); }