Prune a neural network selectively. This class allows you to either add or remove neurons from layers of a neural network. You can also randomize or stimulate neurons. No provision is given for removing an entire layer. Removing a layer requires a totally new set of weights between the layers before and after the removed one. This essentially makes any remaining weights useless. At this point you are better off just creating a new network of the desired dimensions.
        public void TestRandomizeNeuronOutput()
        {
            double[]     d       = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
            BasicNetwork network = EncogUtility.SimpleFeedForward(2, 3, 0, 1, false);

            NetworkCODEC.ArrayToNetwork(d, network);
            PruneSelective prune = new PruneSelective(network);

            prune.RandomizeNeuron(100, 100, 2, 0);
            Assert.AreEqual("100,100,100,100,0,0,0,0,0,0,0,0,0", network.DumpWeights());
        }
        public void TestNeuronSignificance()
        {
            BasicNetwork   network   = ObtainNetwork();
            PruneSelective prune     = new PruneSelective(network);
            double         inputSig  = prune.DetermineNeuronSignificance(0, 1);
            double         hiddenSig = prune.DetermineNeuronSignificance(1, 1);
            double         outputSig = prune.DetermineNeuronSignificance(2, 1);

            Assert.AreEqual(63.0, inputSig, 0.01);
            Assert.AreEqual(95.0, hiddenSig, 0.01);
            Assert.AreEqual(26.0, outputSig, 0.01);
        }
        public void TestIncreaseNeuronCountHidden2()
        {
            BasicNetwork   network = EncogUtility.SimpleFeedForward(5, 6, 0, 2, true);
            PruneSelective prune   = new PruneSelective(network);

            prune.ChangeNeuronCount(1, 60);

            BasicMLData  input = new BasicMLData(5);
            BasicNetwork model = EncogUtility.SimpleFeedForward(5, 60, 0, 2, true);

            CheckWithModel(model.Structure.Flat, network.Structure.Flat);
            model.Compute(input);
            network.Compute(input);
        }
        public void TestPruneNeuronHidden()
        {
            BasicNetwork   network = ObtainNetwork();
            PruneSelective prune   = new PruneSelective(network);

            prune.Prune(1, 1);
            Assert.AreEqual(18, network.EncodedArrayLength());
            Assert.AreEqual(2, network.GetLayerNeuronCount(1));
            Assert.AreEqual("1,3,4,5,7,8,9,11,12,13,15,16,17,18,19,23,24,25", network.DumpWeights());

            BasicNetwork model = EncogUtility.SimpleFeedForward(2, 2, 0, 4, false);

            CheckWithModel(model.Structure.Flat, network.Structure.Flat);
        }
        public void TestIncreaseNeuronCountHidden()
        {
            BasicNetwork network = XOR.CreateTrainedXOR();

            Assert.IsTrue(XOR.VerifyXOR(network, 0.10));
            PruneSelective prune = new PruneSelective(network);

            prune.ChangeNeuronCount(1, 5);

            BasicNetwork model = EncogUtility.SimpleFeedForward(2, 5, 0, 1, false);

            CheckWithModel(model.Structure.Flat, network.Structure.Flat);

            Assert.IsTrue(XOR.VerifyXOR(network, 0.10));
        }
        public void TestPruneNeuronOutput()
        {
            BasicNetwork network = ObtainNetwork();

            Assert.AreEqual(4, network.OutputCount);
            PruneSelective prune = new PruneSelective(network);

            prune.Prune(2, 1);
            Assert.AreEqual(21, network.EncodedArrayLength());
            Assert.AreEqual(3, network.GetLayerNeuronCount(2));
            Assert.AreEqual("1,2,3,4,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25", network.DumpWeights());

            BasicNetwork model = EncogUtility.SimpleFeedForward(2, 3, 0, 3, false);

            CheckWithModel(model.Structure.Flat, network.Structure.Flat);
            Assert.AreEqual(3, network.OutputCount);
        }
        public void TestIncreaseNeuronCountHidden()
        {
            BasicNetwork network = XOR.CreateTrainedXOR();
            Assert.IsTrue(XOR.VerifyXOR(network, 0.10));
            PruneSelective prune = new PruneSelective(network);
            prune.ChangeNeuronCount(1, 5);

            BasicNetwork model = EncogUtility.SimpleFeedForward(2, 5, 0, 1, false);
            CheckWithModel(model.Structure.Flat, network.Structure.Flat);

            Assert.IsTrue(XOR.VerifyXOR(network, 0.10));
        }
 public void TestRandomizeNeuronOutput()
 {
     double[] d = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
     BasicNetwork network = EncogUtility.SimpleFeedForward(2, 3, 0, 1, false);
     NetworkCODEC.ArrayToNetwork(d, network);
     PruneSelective prune = new PruneSelective(network);
     prune.RandomizeNeuron(100, 100, 2, 0);
     Assert.AreEqual("100,100,100,100,0,0,0,0,0,0,0,0,0", network.DumpWeights());
 }
        public void TestPruneNeuronOutput()
        {
            BasicNetwork network = ObtainNetwork();
            Assert.AreEqual(4, network.OutputCount);
            PruneSelective prune = new PruneSelective(network);
            prune.Prune(2, 1);
            Assert.AreEqual(21, network.EncodedArrayLength());
            Assert.AreEqual(3, network.GetLayerNeuronCount(2));
            Assert.AreEqual("1,2,3,4,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25", network.DumpWeights());

            BasicNetwork model = EncogUtility.SimpleFeedForward(2, 3, 0, 3, false);
            CheckWithModel(model.Structure.Flat, network.Structure.Flat);
            Assert.AreEqual(3, network.OutputCount);
        }
        public void TestPruneNeuronHidden()
        {
            BasicNetwork network = ObtainNetwork();
            PruneSelective prune = new PruneSelective(network);
            prune.Prune(1, 1);
            Assert.AreEqual(18, network.EncodedArrayLength());
            Assert.AreEqual(2, network.GetLayerNeuronCount(1));
            Assert.AreEqual("1,3,4,5,7,8,9,11,12,13,15,16,17,18,19,23,24,25", network.DumpWeights());

            BasicNetwork model = EncogUtility.SimpleFeedForward(2, 2, 0, 4, false);
            CheckWithModel(model.Structure.Flat, network.Structure.Flat);
        }
 public void TestNeuronSignificance()
 {
     BasicNetwork network = ObtainNetwork();
     PruneSelective prune = new PruneSelective(network);
     double inputSig = prune.DetermineNeuronSignificance(0, 1);
     double hiddenSig = prune.DetermineNeuronSignificance(1, 1);
     double outputSig = prune.DetermineNeuronSignificance(2, 1);
     Assert.AreEqual(63.0, inputSig, 0.01);
     Assert.AreEqual(95.0, hiddenSig, 0.01);
     Assert.AreEqual(26.0, outputSig, 0.01);
 }
        public void TestIncreaseNeuronCountHidden2()
        {
            BasicNetwork network = EncogUtility.SimpleFeedForward(5, 6, 0, 2, true);
            PruneSelective prune = new PruneSelective(network);
            prune.ChangeNeuronCount(1, 60);

            BasicMLData input = new BasicMLData(5);
            BasicNetwork model = EncogUtility.SimpleFeedForward(5, 60, 0, 2, true);
            CheckWithModel(model.Structure.Flat, network.Structure.Flat);
            model.Compute(input);
            network.Compute(input);
        }