Exemple #1
0
        private static async Task XOrClassificationWithSoftmax()
        {
            var trainingPatterns = new List <TrainingPattern>
            {
                new TrainingPattern(new [] { 0d, 0d }, new [] { 0d, 1d }),
                new TrainingPattern(new [] { 1d, 0d }, new [] { 1d, 0d }),
                new TrainingPattern(new [] { 0d, 1d }, new [] { 1d, 0d }),
                new TrainingPattern(new [] { 1d, 1d }, new [] { 0d, 1d }),
            };

            var perceptron = await new ErrorBackPropagationBuilder()
                             .With.ANewLayerOfInputUnits(2)
                             .ConnectedTo.ANewLayerOfHiddenUnits(3).With.SigmoidActivation()
                             .ConnectedTo.ANewLayerOfOutputUnits(2).With.SoftmaxActivation()
                             .And.UseCrossEntropyErrorFunction()
                             .And.Bias(0.5)
                             .And.LearningRate(1d)
                             .And.Momentum(0d)
                             .And.SlopeMultiplier(1d)
                             .And.UseOneHotEncoding()
                             .And.SetupNetwork()
                             .And.NameEverything()
                             .And.ReadyForTraining()
                             .TrainAsync(trainingPatterns, 0.1d, 1000);

            // Go through serialization/deserialization loop
            File.WriteAllText("perceptron.txt", new PerceptronSerializer().SerializeJson(perceptron));
            perceptron = new PerceptronSerializer().DeserializeJson(File.ReadAllText("perceptron.txt"));

            // Show XOR working
            var result1 = await perceptron.FireAsync(new[] { 0d, 0d });

            Console.WriteLine("(0, 0) -> (" + string.Join(",", result1) + ")");

            var result2 = await perceptron.FireAsync(new[] { 1d, 0d });

            Console.WriteLine("(1, 0) -> (" + string.Join(",", result2) + ")");

            var result3 = await perceptron.FireAsync(new[] { 0d, 1d });

            Console.WriteLine("(0, 1) -> (" + string.Join(",", result3) + ")");

            var result4 = await perceptron.FireAsync(new[] { 1d, 1d });

            Console.WriteLine("(1, 1) -> (" + string.Join(",", result4) + ")");
        }
Exemple #2
0
        public void SetUp()
        {
            _network = new StandardNetworkBuilder()
                       .With.ANewLayerOfInputUnits(2)
                       .ConnectedTo.ANewLayerOfHiddenUnits(3).With.UnitActivationMultiFold <SoftmaxUnitActivation <IUnit, IConnection, IUnitActivationCreatable <IUnit> > >()
                       .ConnectedTo.ANewLayerOfOutputUnits(2).With.OutputUnitActivationMultiFold <SoftmaxUnitActivation <IUnit, IConnection, IUnitActivationCreatable <IUnit> > >()
                       .And.Bias(Bias)
                       .And.SlopeMultiplier(SlopeMultiplier)
                       .And.Build()
                       .And.WithNamesAssignedToEverything()
                       .And.GetNetwork();

            var connections = _network.SelectMany(u => u).SelectMany(u => u.OutgoingConnections);
            var weight      = 0.0001d;

            connections.Enumerate(c =>
            {
                weight += 0.01d;
                c.Properties.Weight = weight;
            });

            _perceptronSerializer = new PerceptronSerializer();
        }