private void UnitTest1()
        {
            OutputText.Text = "";
            NetworkDocument doc = new NetworkDocument();
            InputNeuron i1 = new InputNeuron() {OutputValue = 0.7};
            InputNeuron i2 = new InputNeuron() {OutputValue = 0.1};
            InputNeuron i3 = new InputNeuron() {OutputValue = 0.3};

            doc.Inputs.Add(i1);
            doc.Inputs.Add(i2);
            doc.Inputs.Add(i3);

            OutputNeuron o = new OutputNeuron();
            doc.Outputs.Add(new OutputNeuron());

            NeuronHelper.ConnectNodes(i1, o, -0.3);
            NeuronHelper.ConnectNodes(i2, o, 3.1);
            NeuronHelper.ConnectNodes(i3, o, 0.5);
            double expected = 0.25;
            double answer = o.SumInputs(true);

            OutputText.Text += "Summation test 3 inputs values 0.7, 0.1,0.3 respective weights 0.3,3.1,0.5" +
                               Environment.NewLine;
            OutputText.Text += "Expected = " + expected + Environment.NewLine;
            OutputText.Text += "Actual = " + answer + Environment.NewLine;
        }
Example #2
0
        //
        // apply momentum to help get out of dips
        //
        public void AdjustFromWeights(NetworkDocument doc)
        {
            foreach (Synapse s in BackwardConnections)
            {
                double last = s.Weight; //save the current weight for the momentum calculations
                //http://www.cheshireeng.com/Neuralyst/nnbg.htm
                //wij = w'ij + (1 - M).LR.ej.Xj+M.(w'ij - w''ij)
                s.Weight = s.Weight +
                           ((1 - doc.Momentum) * doc.LearningRate * ErrorValue * s.FromNode.OutputValue) +
                           (doc.Momentum * (s.Weight - s.LastWeight));
                s.LastWeight = last;
                Debug.WriteLine("Adjust from weights : " + s.Weight);

            }
            if (doc.UsesBias)
               BiasValue = BiasValue + (doc.LearningRate * ErrorValue * ErrorValue) * 1;
        }
Example #3
0
        public bool WithinTolerance(NetworkDocument doc)
        {
            bool ret = false;
            double lowRange = 0 - doc.Tolerance;
            double highRange = 0 + doc.Tolerance;
            if (Math.Abs(ExpectedValue) < 0.1)
            {
                if (OutputValue >= lowRange && OutputValue <= highRange)
                    ret = true;
            }
            else
            {
                lowRange = ExpectedValue - (Math.Abs(ExpectedValue) * doc.Tolerance);
                highRange = ExpectedValue + (Math.Abs(ExpectedValue) * doc.Tolerance);
                if (OutputValue >= lowRange && OutputValue <= highRange)
                    ret = true;
            }

            return ret;
        }
 protected override void OnNavigatedTo(NavigationEventArgs e)
 {
     base.OnNavigatedTo(e);
     CurrentDocument = (NetworkDocument)e.Parameter;
 }
Example #5
0
 //
 // The calculation for the input neuron is the same as the input - In many ways the code below only illustrates this serving little function
 // but clarifies the use of activation identity
 //
 public override double CalcOutput(NetworkDocument doc)
 {
     OutputValue = (NeuronHelper.GetActivation(OutputValue, Enumerations.ActivationFunctions.ActivationIdentity,doc.Threshold));
     return OutputValue;
 }
Example #6
0
        //
        // Using the error from the node adjust the weights before (going towards input layer)
        //
        public virtual void AdjustFromWeights1(NetworkDocument doc)
        {
            foreach (Synapse s in BackwardConnections)
            {
                //this has been unit tested and is correct
                //  DiagnosticData.addLogged(new DiagData("AdjustFromWeights", DiagData.DIAG_TYPE_INFO, "Weight before = " + String.valueOf(s.Weight)));
                s.Weight = s.Weight + (doc.LearningRate*ErrorValue)*s.FromNode.OutputValue;
                //  DiagnosticData.addLogged(new DiagData("AdjustFromWeights", DiagData.DIAG_TYPE_INFO, "Weight after = " + String.valueOf(s.Weight)));

            }
            //  DiagnosticData.addLogged(new DiagData("AdjustFromWeights", DiagData.DIAG_TYPE_INFO, "Bias before = " + String.valueOf(BiasValue)));
            if (doc.UsesBias)
                BiasValue = BiasValue + (doc.LearningRate * ErrorValue) * 1;
            //   DiagnosticData.addLogged(new DiagData("AdjustFromWeights", DiagData.DIAG_TYPE_INFO, "Bias after = " + String.valueOf(BiasValue)));
        }
Example #7
0
 public virtual double CalcOutput(NetworkDocument doc)
 {
     double sum = SumInputs(doc.UsesBias);
     OutputValue = (NeuronHelper.GetActivation(sum, doc.ActivationFunction,doc.Bias));
     return OutputValue;
 }
        private void UnitTest3()
        {
            double output1;
            double output2;
            OutputText.Text = "";
            NetworkDocument doc = new NetworkDocument() {Bias = -2.0,Momentum = 0.05,LearningRate = 0.5};
            doc.ActivationFunction = Enumerations.ActivationFunctions.ActivationSigmoidal;
            doc.UsesBias = true;
            InputNeuron i0 = new InputNeuron() { OutputValue = 0.1 };
            InputNeuron i1 = new InputNeuron() { OutputValue = 0.9 };
            doc.Inputs.Add(i0);
            doc.Inputs.Add(i1);
            doc.NumLayers = 2;//this should build the layers
            HiddenNeuron l00 = new HiddenNeuron(){BiasValue = 2.0};
            HiddenNeuron l01 = new HiddenNeuron() { BiasValue = 2.0 };
            HiddenNeuron l10 = new HiddenNeuron() { BiasValue = 3.0 };
            HiddenNeuron l11 = new HiddenNeuron() { BiasValue = -2.0 };
            doc.Hidden[0].Add(l00);
            doc.Hidden[0].Add(l01);
            doc.Hidden[1].Add(l10);
            doc.Hidden[1].Add(l11);
            OutputNeuron o = new OutputNeuron() {ExpectedValue = 0.9,BiasValue = -2};
            doc.Outputs.Add(o);
            //connect layer 1
            NeuronHelper.ConnectNodes(i0, l00, -2);
            NeuronHelper.ConnectNodes(i0, l01, 3);
            NeuronHelper.ConnectNodes(i1, l00, -2);
            NeuronHelper.ConnectNodes(i1, l01, 3);
            //connect layer 2
            NeuronHelper.ConnectNodes(l00, l10, -2);
            NeuronHelper.ConnectNodes(l00, l11, 2);
            NeuronHelper.ConnectNodes(l01, l10, -4);
            NeuronHelper.ConnectNodes(l01, l11, 2);
            //output layer
            NeuronHelper.ConnectNodes(l10, o, 3);
            NeuronHelper.ConnectNodes(l11, o, 1);

            output1 = l00.SumInputs(true);
            output2 = l01.SumInputs(true);
            WriteOutput(0, output1);
            WriteOutput(5, output2);

            output1 = l00.CalcOutput(doc);
            output2 = l01.CalcOutput(doc);
            WriteOutput(0.5, output1);
            WriteOutput(0.99, output2);

            output1 = l10.SumInputs(doc.UsesBias);
            output2 = l11.SumInputs(doc.UsesBias);
            WriteOutput(-1.972, output1);
            WriteOutput(0.98, output2);

            output1 = l10.CalcOutput(doc);
            output2 = l11.CalcOutput(doc);
            WriteOutput(0.122, output1);
            WriteOutput(0.728, output2);

            output1 = doc.Outputs[0].SumInputs(doc.UsesBias);
            output2 = doc.Outputs[0].CalcOutput(doc);
            WriteOutput(-0.906, output1);
            WriteOutput(0.288, output2);

            //backward pass
            output1 = doc.Outputs[0].CalcError();
            WriteOutput(0.125, output1);

            output1 = l10.CalcError();
            WriteOutput(0.040, output1);
            output1 = l11.CalcError();
            WriteOutput(0.025, output1);

            output1 = l00.CalcError();
            WriteOutput(0, output1);
            output1 = l01.CalcError();
            WriteOutput(0, output1);

            o.AdjustFromWeights(doc);
            l10.AdjustFromWeights(doc);
            l11.AdjustFromWeights(doc);
            l00.AdjustFromWeights(doc);
            l01.AdjustFromWeights(doc);
        }
        public async void LoadLastDocument()
        {
            if (ApplicationData.Current.LocalSettings.Values.ContainsKey("LastDocName"))
            {
                _lastDocName = (String)(ApplicationData.Current.LocalSettings.Values["LastDocName"]);

                StorageFolder localFolder = ApplicationData.Current.LocalFolder;

                try
                {
                    StorageFile sampleFile = await localFolder.GetFileAsync(_lastDocName);
                    await FileIO.ReadTextAsync(sampleFile);
                }

                catch (Exception)
                {
                    // No file to load or error loading it

                }
            }
            else
            {
                CurrentDocument = new NetworkDocument
                {
                    NumInput = Defaults.DefaultInputs,
                    NumOutput = Defaults.DefaultOutputs,
                    NumHidden = Defaults.DefaultHidden,
                    NumLayers = Defaults.DefaultLayers,
                    LearningRate = Defaults.DefaultLearningRate,
                    Momentum = Defaults.DefaultMomentum,
                    ActivationFunction = Enumerations.ActivationFunctions.ActivationSigmoidal,
                    Tolerance = Defaults.DefaultTolerance,
                    Threshold = Defaults.DefaultThreshold,
                    NetworkName = Defaults.DefaultName,
                    UsesBias = Defaults.UsesBias
                };
            }
            SetDataContextsUi();
        }