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) + ")"); }
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(); }