Esempio n. 1
0
        public void TestAutomaticClose()
        {
            Parameters p = NetworkTestHarness.GetParameters();

            p = p.Union(NetworkTestHarness.GetDayDemoTestEncoderParams());
            p.SetParameterByKey(Parameters.KEY.RANDOM, new MersenneTwister(42));

            Net.Network.Network n = Net.Network.Network.Create("test network", p)
                                    .Add(Net.Network.Network.CreateRegion("r1")
                                         .Add(Net.Network.Network.CreateLayer <IInference>("4", p)
                                              .Add((MultiEncoder)MultiEncoder.GetBuilder().Name("").Build())));
            //.Close(); // Not necessary due to implicit call during start() or compute()

            Region r1 = n.Lookup("r1");

            r1.Start();

            Assert.IsTrue(r1.IsClosed());

            try
            {
                r1.Add(Net.Network.Network.CreateLayer <IInference>("5", p));
                Assert.Fail();
            }
            catch (Exception e)
            {
                Assert.IsTrue(e.GetType().IsAssignableFrom(typeof(InvalidOperationException)));
                Assert.AreEqual("Cannot add Layers when Region has already been closed.", e.Message);
            }
        }
Esempio n. 2
0
        public void TestEncoderPassesUpToTopLayer()
        {
            Parameters p = NetworkTestHarness.GetParameters();

            p = p.Union(NetworkTestHarness.GetDayDemoTestEncoderParams());
            p.SetParameterByKey(Parameters.KEY.RANDOM, new MersenneTwister(42));

            p.SetParameterByKey(Parameters.KEY.ANOMALY_KEY_MODE, Anomaly.Mode.PURE);

            Net.Network.Network n = Net.Network.Network.Create("test network", p)
                                    .Add(Net.Network.Network.CreateRegion("r1")
                                         .Add(Net.Network.Network.CreateLayer <IInference>("1", p)
                                              .AlterParameter(Parameters.KEY.AUTO_CLASSIFY, true))
                                         .Add(Net.Network.Network.CreateLayer <IInference>("2", p)
                                              .Add(Anomaly.Create(p)))
                                         .Add(Net.Network.Network.CreateLayer <IInference>("3", p)
                                              .Add(new TemporalMemory()))
                                         .Add(Net.Network.Network.CreateLayer <IInference>("4", p)
                                              .Add(new SpatialPooler())
                                              .Add((MultiEncoder)MultiEncoder.GetBuilder().Name("").Build())));

            Region r1 = n.Lookup("r1");

            r1.Connect("1", "2").Connect("2", "3").Connect("3", "4");

            Assert.IsNotNull(r1.Lookup("1").GetEncoder());
        }
Esempio n. 3
0
        public void TestAdd()
        {
            Parameters p = NetworkTestHarness.GetParameters();

            p = p.Union(NetworkTestHarness.GetDayDemoTestEncoderParams());
            p.SetParameterByKey(Parameters.KEY.RANDOM, new MersenneTwister(42));

            Net.Network.Network n = Net.Network.Network.Create("test network", p)
                                    .Add(Net.Network.Network.CreateRegion("r1")
                                         .Add(Net.Network.Network.CreateLayer <IInference>("4", p)
                                              .Add((MultiEncoder)MultiEncoder.GetBuilder().Name("").Build())));

            Region r1     = n.Lookup("r1");
            ILayer layer4 = r1.Lookup("4");

            Assert.IsNotNull(layer4);
            Assert.AreEqual("r1:4", layer4.GetName());

            try
            {
                r1.Add(Net.Network.Network.CreateLayer <IInference>("4", p));
                Assert.Fail();
            }
            catch (Exception e)
            {
                Assert.IsInstanceOfType(e, typeof(InvalidOperationException));
                Assert.AreEqual("A Layer with the name: 4 has already been added to this Region.", e.Message);
            }
        }
Esempio n. 4
0
        /**
         * Searches through the specified {@link MultiEncoder}'s previously configured
         * encoders to find and return one that is of type {@link CoordinateEncoder} or
         * {@link GeospatialCoordinateEncoder}
         *
         * @param enc   the containing {@code MultiEncoder}
         * @return
         */
        private Optional <IEncoder> GetCoordinateEncoder(MultiEncoder enc)
        {
            foreach (EncoderTuple t in enc.GetEncoders(enc))
            {
                if ((t.GetEncoder() is CoordinateEncoder) || (t.GetEncoder() is GeospatialCoordinateEncoder))
                {
                    return(new Optional <IEncoder>(t.GetEncoder()));  // Optional.of(t.getEncoder());
                }
            }

            return(Optional <IEncoder> .Empty());
        }
Esempio n. 5
0
        /**
         * Searches through the specified {@link MultiEncoder}'s previously configured
         * encoders to find and return one that is of type {@link CategoryEncoder} or
         * {@link SDRCategoryEncoder}
         *
         * @param enc   the containing {@code MultiEncoder}
         * @return
         */
        private Optional <IEncoder> GetCategoryEncoder(MultiEncoder enc)
        {
            foreach (EncoderTuple t in enc.GetEncoders(enc))
            {
                if ((t.GetEncoder() is CategoryEncoder) || (t.GetEncoder() is SDRCategoryEncoder))
                {
                    return(new Optional <IEncoder>(t.GetEncoder())); //Optional.of(t.getEncoder());
                }
            }

            return(Optional <IEncoder> .Empty());
        }
Esempio n. 6
0
        /**
         * Searches through the specified {@link MultiEncoder}'s previously configured
         * encoders to find and return one that is of type {@link DateEncoder}
         *
         * @param enc   the containing {@code MultiEncoder}
         * @return
         */
        private Optional <DateEncoder> GetDateEncoder(MultiEncoder enc)
        {
            foreach (EncoderTuple t in enc.GetEncoders(enc))
            {
                if (t.GetEncoder() is DateEncoder)
                {
                    return(new Optional <DateEncoder>(t.GetEncoder <DateEncoder>()));//Optional.of((DateEncoder)t.GetEncoder());
                }
            }

            return(Optional <DateEncoder> .Empty());
        }
Esempio n. 7
0
        /**
         * Searches through the specified {@link MultiEncoder}'s previously configured
         * encoders to find and return one that is of type {@link DateEncoder}
         *
         * @param enc   the containing {@code MultiEncoder}
         * @return
         */
        private Optional <SDRPassThroughEncoder> GetSDRPassThroughEncoder(MultiEncoder enc)
        {
            foreach (EncoderTuple t in enc.GetEncoders(enc))
            {
                if (t.GetEncoder() is SDRPassThroughEncoder)
                {
                    return(new Optional <SDRPassThroughEncoder>(t.GetEncoder <SDRPassThroughEncoder>())); // Optional.of((SDRPassThroughEncoder)t.getEncoder());
                }
            }

            return(Optional <SDRPassThroughEncoder> .Empty());
        }
Esempio n. 8
0
        /**
         * Called internally during construction to build the encoders
         * needed to process the configured field types.
         */
        private void CreateEncoder()
        {
            encoder = (MultiEncoder)MultiEncoder.GetBuilder().Name("MultiEncoder").Build();

            Map <string, Map <string, object> > encoderSettings;

            if (localParameters != null &&
                (encoderSettings = (Map <string, Map <string, object> >)localParameters.GetParameterByKey(Parameters.KEY.FIELD_ENCODING_MAP)) != null &&
                encoderSettings.Any())
            {
                InitEncoders(encoderSettings);
                MakeIndexEncoderMap();
            }
        }
Esempio n. 9
0
        public void TestIsLearn()
        {
            Parameters p = NetworkTestHarness.GetParameters().Copy();

            p = p.Union(NetworkTestHarness.GetDayDemoTestEncoderParams());
            p.SetParameterByKey(Parameters.KEY.COLUMN_DIMENSIONS, new int[] { 30 });
            p.SetParameterByKey(Parameters.KEY.SYN_PERM_INACTIVE_DEC, 0.1);
            p.SetParameterByKey(Parameters.KEY.SYN_PERM_ACTIVE_INC, 0.1);
            p.SetParameterByKey(Parameters.KEY.SYN_PERM_TRIM_THRESHOLD, 0.05);
            p.SetParameterByKey(Parameters.KEY.SYN_PERM_CONNECTED, 0.4);
            p.SetParameterByKey(Parameters.KEY.MAX_BOOST, 10.0);
            p.SetParameterByKey(Parameters.KEY.DUTY_CYCLE_PERIOD, 7);
            p.SetParameterByKey(Parameters.KEY.RANDOM, new MersenneTwister(42));

            p.SetParameterByKey(Parameters.KEY.ANOMALY_KEY_MODE, Anomaly.Mode.PURE);
            Net.Network.Network n = Net.Network.Network.Create("test network", p)
                                    .Add(Net.Network.Network.CreateRegion("r1")
                                         .Add(Net.Network.Network.CreateLayer <IInference>("1", p)
                                              .AlterParameter(Parameters.KEY.AUTO_CLASSIFY, true))
                                         .Add(Net.Network.Network.CreateLayer <IInference>("2", p)
                                              .Add(Anomaly.Create(p)))
                                         .Add(Net.Network.Network.CreateLayer <IInference>("3", p)
                                              .Add(new TemporalMemory()))
                                         .Add(Net.Network.Network.CreateLayer <IInference>("4", p)
                                              .Add(new SpatialPooler())
                                              .Add((MultiEncoder)MultiEncoder.GetBuilder().Name("").Build()))
                                         .Connect("1", "2")
                                         .Connect("2", "3")
                                         .Connect("3", "4"));

            n.Lookup("r1").Close();

            n.SetLearn(false);

            Assert.IsFalse(n.IsLearn());

            Region r1 = n.Lookup("r1");

            Assert.IsFalse(n.IsLearn());
            ILayer layer = r1.GetTail();

            Assert.IsFalse(layer.SetIsLearn());
            while (layer.GetNext() != null)
            {
                layer = layer.GetNext();
                Assert.IsFalse(layer.SetIsLearn());
            }
        }
Esempio n. 10
0
        /**
         * Searches through the specified {@link MultiEncoder}'s previously configured
         * encoders to find and return one that is of type {@link ScalarEncoder},
         * {@link RandomDistributedScalarEncoder}, {@link AdaptiveScalarEncoder},
         * {@link LogEncoder} or {@link DeltaEncoder}.
         *
         * @param enc   the containing {@code MultiEncoder}
         * @return
         */
        private Optional <IEncoder> GetNumberEncoder(MultiEncoder enc)
        {
            foreach (EncoderTuple t in enc.GetEncoders(enc))
            {
                if ((t.GetEncoder() is RandomDistributedScalarEncoder) ||
                    (t.GetEncoder() is ScalarEncoder) ||
                    (t.GetEncoder() is AdaptiveScalarEncoder) ||
                    (t.GetEncoder() is LogEncoder) ||
                    (t.GetEncoder() is DeltaEncoder))
                {
                    return(new Optional <IEncoder>(t.GetEncoder())); // Optional.of(t.getEncoder());
                }
            }

            return(Optional <IEncoder> .Empty());
        }
Esempio n. 11
0
        /// <summary>
        /// Multi encoder for day month and segment
        /// </summary>
        /// <returns></returns>
        public static EncoderBase FetchDateTimeEncoder()
        {
            EncoderBase dayEncoder     = FetchDayEncoder();
            EncoderBase monthEncoder   = FetchMonthEncoder();
            EncoderBase segmentEncoder = FetchSegmentEncoder();
            EncoderBase dayOfWeek      = FetchWeekDayEncoder();

            List <EncoderBase> encoder = new List <EncoderBase>();

            encoder.Add(dayEncoder);
            encoder.Add(monthEncoder);
            encoder.Add(segmentEncoder);
            encoder.Add(dayOfWeek);

            MultiEncoder encoderSetting = new MultiEncoder(encoder);

            return(encoderSetting);
        }
Esempio n. 12
0
        public void TestInputDimensionsAutomaticallyInferredFromEncoderWidth()
        {
            Parameters p = NetworkTestHarness.GetParameters();

            p = p.Union(NetworkTestHarness.GetDayDemoTestEncoderParams());
            p.SetParameterByKey(Parameters.KEY.RANDOM, new MersenneTwister(42));

            // Purposefully set this to be wrong
            p.SetParameterByKey(Parameters.KEY.INPUT_DIMENSIONS, new int[] { 40, 40 });

            Net.Network.Network.Create("test network", p)
            .Add(Net.Network.Network.CreateRegion("r1")
                 .Add(Net.Network.Network.CreateLayer <IInference>("4", p)
                      .Add((MultiEncoder)MultiEncoder.GetBuilder().Name("").Build()))
                 .Close());

            // Should correct the above ( {40,40} ) to have only one dimension whose width is 8 ( {8} )
            Assert.IsTrue(Arrays.AreEqual(new int[] { 8 }, (int[])p.GetParameterByKey(Parameters.KEY.INPUT_DIMENSIONS)));
        }
Esempio n. 13
0
        /// <summary>
        /// Returns the resident <see cref="MultiEncoder"/> or the encoder residing in this
        /// <see cref="ILayer"/>'s <see cref="ISensor"/>, if any.
        /// </summary>
        public MultiEncoder GetEncoder()
        {
            if (Encoder != null)
            {
                return(Encoder);
            }
            if (HasSensor())
            {
                return(Sensor.GetEncoder());
            }

            MultiEncoder e = ParentNetwork.GetEncoder();

            if (e != null)
            {
                return(e);
            }

            return(null);
        }
Esempio n. 14
0
        protected BaseLayer(Parameters @params, MultiEncoder e, SpatialPooler sp, TemporalMemory tm,
                            bool?autoCreateClassifiers, Anomaly a)
        {
            // Make sure we have a valid parameters object
            if (@params == null)
            {
                throw new InvalidOperationException("No parameters specified.");
            }

            // Check to see if the Parameters include the encoder configuration.
            if (@params.GetParameterByKey(Parameters.KEY.FIELD_ENCODING_MAP) == null && e != null)
            {
                throw new InvalidOperationException("The passed in Parameters must contain a field encoding map " + "specified by org.numenta.nupic.Parameters.KEY.FIELD_ENCODING_MAP");
            }

            Params                = @params;
            Encoder               = e;
            SpatialPooler         = sp;
            TemporalMemory        = tm;
            AutoCreateClassifiers = autoCreateClassifiers;
            AnomalyComputer       = a;

            Connections = new Connections();

            InitializeMask();

            if (LOGGER.IsDebugEnabled)
            {
                LOGGER.DebugFormat("Layer successfully created containing: {0}{1}{2}{3}{4}",
                                   (Encoder == null ? "" : "MultiEncoder,"),
                                   (SpatialPooler == null ? "" : "SpatialPooler,"),
                                   (TemporalMemory == null ? "" : "TemporalMemory,"),
                                   (autoCreateClassifiers == null ? "" : "Auto creating CLAClassifiers for each input field."),
                                   (AnomalyComputer == null ? "" : "Anomaly"));
            }
        }
Esempio n. 15
0
 public void SetEncoder(MultiEncoder encoder)
 {
     this.encoder = encoder;
 }
Esempio n. 16
0
        public void TestMultiLayerAssemblyNoSensor()
        {
            Parameters p = NetworkTestHarness.GetParameters().Copy();

            p = p.Union(NetworkTestHarness.GetDayDemoTestEncoderParams());
            p.SetParameterByKey(Parameters.KEY.COLUMN_DIMENSIONS, new int[] { 30 });
            p.SetParameterByKey(Parameters.KEY.SYN_PERM_INACTIVE_DEC, 0.1);
            p.SetParameterByKey(Parameters.KEY.SYN_PERM_ACTIVE_INC, 0.1);
            p.SetParameterByKey(Parameters.KEY.SYN_PERM_TRIM_THRESHOLD, 0.05);
            p.SetParameterByKey(Parameters.KEY.SYN_PERM_CONNECTED, 0.4);
            p.SetParameterByKey(Parameters.KEY.MAX_BOOST, 10.0);
            p.SetParameterByKey(Parameters.KEY.DUTY_CYCLE_PERIOD, 7);
            p.SetParameterByKey(Parameters.KEY.RANDOM, new MersenneTwister(42));

            p.SetParameterByKey(Parameters.KEY.ANOMALY_KEY_MODE, Anomaly.Mode.PURE);

            Net.Network.Network n = Net.Network.Network.Create("test network", p)
                                    .Add(Net.Network.Network.CreateRegion("r1")
                                         .Add(Net.Network.Network.CreateLayer <IInference>("1", p)
                                              .AlterParameter(Parameters.KEY.AUTO_CLASSIFY, true))
                                         .Add(Net.Network.Network.CreateLayer <IInference>("2", p)
                                              .Add(Anomaly.Create(p)))
                                         .Add(Net.Network.Network.CreateLayer <IInference>("3", p)
                                              .Add(new TemporalMemory()))
                                         .Add(Net.Network.Network.CreateLayer <IInference>("4", p)
                                              .Add(new SpatialPooler())
                                              .Add((MultiEncoder)MultiEncoder.GetBuilder().Name("").Build()))
                                         .Connect("1", "2")
                                         .Connect("2", "3")
                                         .Connect("3", "4"));

            Region r1 = n.Lookup("r1");

            r1.Lookup("3").Using(r1.Lookup("4").GetConnections()); // How to share Connections object between Layers

            //r1.Observe().Subscribe(new Subscriber<Inference>()
            //{
            //    public void onCompleted() { }
            //    public void onError(Throwable e) { e.printStackTrace(); }
            //    public void onNext(Inference i)
            //    {
            //        // UNCOMMENT TO VIEW STABILIZATION OF PREDICTED FIELDS
            //        System.Out.println("Day: " + r1.GetInput() + " - predictive cells: " + i.GetPreviousPredictiveCells() +
            //            "   -   " + Arrays.toString(i.GetFeedForwardSparseActives()) + " - " +
            //            ((int)Math.Rint(((Number)i.GetClassification("dayOfWeek").GetMostProbableValue(1)).doubleValue())));
            //    }
            //});

            const int            NUM_CYCLES        = 400;
            const int            INPUT_GROUP_COUNT = 7; // Days of Week
            Map <String, Object> multiInput        = new Map <string, object>();

            for (int i = 0; i < NUM_CYCLES; i++)
            {
                for (double j = 0; j < INPUT_GROUP_COUNT; j++)
                {
                    multiInput.Add("dayOfWeek", j);
                    r1.Compute(multiInput);
                }
                r1.Reset();
            }

            r1.SetLearn(false);
            r1.Reset();

            // Test that we get proper output after prediction stabilization
            //r1.Observe().Subscribe(new Subscriber<Inference>()
            //{
            //    public void onCompleted() { }
            //    public void onError(Throwable e) { e.printStackTrace(); }
            //    public void onNext(Inference i)
            //    {
            //        int nextDay = ((int)Math.Rint(((Number)i.GetClassification("dayOfWeek").GetMostProbableValue(1)).doubleValue()));
            //        Assert.AreEqual(6, nextDay);
            //    }
            //});
            multiInput.Add("dayOfWeek", 5.0);
            r1.Compute(multiInput);
        }
Esempio n. 17
0
 /// <summary>
 /// Constructs a new MultiCodec object.
 /// </summary>
 public MultiCodec()
 {
     _encoder = new MultiEncoder <T>();
     _decoder = new MultiDecoder <T>();
 }
Esempio n. 18
0
 protected BaseRxLayer(Parameters @params, MultiEncoder e, SpatialPooler sp, TemporalMemory tm,
                       bool?autoCreateClassifiers, Anomaly a)
     : base(@params, e, sp, tm, autoCreateClassifiers, a)
 {
 }
Esempio n. 19
0
 /// <summary>
 /// Returns the classifier(s) for this layer
 /// </summary>
 /// <returns></returns>
 public abstract IClassifier GetClassifier(MultiEncoder encoder, string predictedFieldName);
Esempio n. 20
0
        /// <summary>
        /// Returns the encoded output stream of the underlying <see cref="IStream{T}"/>'s encoder.
        /// </summary>
        /// <returns>the encoded output stream.</returns>
        public IStream <int[]> GetOutputStream()
        {
            if (IsTerminal())
            {
                throw new InvalidOperationException("Stream is already \"terminal\" (operated upon or empty)");
            }

            MultiEncoder encoder = (MultiEncoder)GetEncoder();

            if (encoder == null)
            {
                throw new InvalidOperationException("setLocalParameters(Parameters) must be called before calling this method.");
            }

            // Protect outputStream formation and creation of "fan out" also make sure
            // that no other thread is trying to update the fan out lists
            IStream <int[]> retVal = null;

            try
            {
                System.Threading.Monitor.Enter(_criticalAccessLock);

                string[]        fieldNames = GetFieldNames();
                FieldMetaType[] fieldTypes = GetFieldTypes();

                if (outputStream == null)
                {
                    if (!indexFieldMap.Any())
                    {
                        for (int i = 0; i < fieldNames.Length; i++)
                        {
                            indexFieldMap.Add(fieldNames[i], i);
                        }
                    }

                    // NOTE: The "inputMap" here is a special local implementation
                    //       of the "Map" interface, overridden so that we can access
                    //       the keys directly (without hashing). This map is only used
                    //       for this use case so it is ok to use this optimization as
                    //       a convenience.
                    if (inputMap == null)
                    {
                        inputMap        = new InputMap(this);
                        inputMap.fTypes = fieldTypes;
                    }

                    bool isParallel = @delegate.GetInputStream().IsParallel();

                    output = new List <int[]>();

                    IMetaStream     inputStream       = @delegate.GetInputStream();
                    IStream <int[]> mappedInputStream = ((IMetaStream <string[]>)inputStream).Map(i =>
                    {
                        //Debug.WriteLine(">> Calling HTM Sensor mapping");
                        string[] arr = i;
                        inputMap.arr = arr;
                        return(Input(arr, fieldNames, fieldTypes, output, isParallel));
                    });

                    outputStream = mappedInputStream;

                    //mainIterator = outputStream.GetEnumerator();
                }

                //LinkedList<int[]> l = new LinkedList<int[]>();
                //fanOuts.Add(l);

                //ObjectStreamCopier copy = new ObjectStreamCopier(this, l);
                //Copy copy = new Copy(this, l);
                //copy.Reset();
                //retVal = new Stream<int[]>(l, copy, outputStream.GetStreamState());
                retVal = outputStream.Copy();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            finally
            {
                System.Threading.Monitor.Exit(_criticalAccessLock);
            }

            return(retVal);
        }
Esempio n. 21
0
 /// <summary>
 /// Adds a <see cref="MultiEncoder"/> to this <see cref="ILayer"/>
 /// </summary>
 /// <param name="encoder">the added MultiEncoder</param>
 /// <returns>this Layer instance (in fluent-style)</returns>
 public abstract ILayer Add(MultiEncoder encoder);
Esempio n. 22
0
 /**
  * Sets the {@link MultiEncoder} on this Network
  * @param e
  */
 public void SetEncoder(MultiEncoder e)
 {
     _encoder = e;
 }