/** * Creates a {@link Network} containing 2 {@link Region}s with multiple * {@link PALayer}s in each. * * @return a multi-region Network */ internal Network.Network CreateMultiRegionNetwork() { Parameters p = NetworkDemoHarness.GetParameters(); p = p.Union(NetworkDemoHarness.GetNetworkDemoTestEncoderParams()); return(Network.Network.Create("Network API Demo", p) .Add(Network.Network.CreateRegion("Region 1") .Add(Network.Network.CreateLayer("Layer 2/3", p) .AlterParameter(Parameters.KEY.AUTO_CLASSIFY, true) .Add(Anomaly.Create()) .Add(new TemporalMemory())) .Add(Network.Network.CreateLayer("Layer 4", p) .Add(new PASpatialPooler())) .Connect("Layer 2/3", "Layer 4")) .Add(Network.Network.CreateRegion("Region 2") .Add(Network.Network.CreateLayer("Layer 2/3", p) .AlterParameter(Parameters.KEY.AUTO_CLASSIFY, true) .Add(Anomaly.Create()) .Add(new TemporalMemory()) .Add(new PASpatialPooler())) .Add(Network.Network.CreateLayer("Layer 4", p) .Add(Sensor <FileInfo> .Create(FileSensor.Create, SensorParams.Create( SensorParams.Keys.Path, "", ResourceLocator.Path(typeof(Resources), "rec-center-15m.csv"))))) .Connect("Layer 2/3", "Layer 4")) .Connect("Region 1", "Region 2")); }
private Net.Network.Network GetLoadedDayOfWeekNetwork() { Parameters p = NetworkTestHarness.GetParameters().Copy(); p = p.Union(NetworkTestHarness.GetDayDemoTestEncoderParams()); p.SetParameterByKey(Parameters.KEY.RANDOM, new XorshiftRandom(42)); Sensor <ObservableSensor <string[]> > sensor = Sensor <ObservableSensor <string[]> > .Create( ObservableSensor <string[]> .Create, SensorParams.Create(SensorParams.Keys.Obs, new object[] { "name", PublisherSupplier.GetBuilder() .AddHeader("dayOfWeek") .AddHeader("number") .AddHeader("B").Build() })); Net.Network.Network network = Net.Network.Network.Create("test network", p) .Add(Net.Network.Network.CreateRegion("r1") .Add(Net.Network.Network.CreateLayer("1", p) .AlterParameter(Parameters.KEY.AUTO_CLASSIFY, true) .Add(Anomaly.Create()) .Add(new TemporalMemory()) .Add(new SpatialPooler()) .Add(sensor))); return(network); }
/** * Creates a basic {@link Network} with 1 {@link Region} and 1 {@link PALayer}. However * this basic network contains all algorithmic components. * * @return a basic Network */ internal Network.Network CreateBasicNetwork() { Parameters p = NetworkDemoHarness.GetParameters(); p = p.Union(NetworkDemoHarness.GetNetworkDemoTestEncoderParams()); // This is how easy it is to create a full running Network! var sineData = SineGenerator.GenerateSineWave(100, 100 * 20, 10, 1) .Select(s => s.ToString(NumberFormatInfo.InvariantInfo)); string[] header = new[] { "sinedata", "float", "" }; object[] n = { "sine", header.Union(sineData).ToObservable() }; SensorParams parms = SensorParams.Create(SensorParams.Keys.Obs, n); Sensor <ObservableSensor <string[]> > sensor = Sensor <ObservableSensor <string[]> > .Create(ObservableSensor <string[]> .Create, parms); return(Network.Network.Create("Network API Demo", p) .Add(Network.Network.CreateRegion("Region 1") .Add(Network.Network.CreateLayer("Layer 2/3", p) .AlterParameter(Parameters.KEY.AUTO_CLASSIFY, true) .Add(Anomaly.Create()) .Add(new TemporalMemory()) .Add(new Algorithms.SpatialPooler()) .Add(sensor)))); }
/** * Creates a basic {@link Network} with 1 {@link Region} and 1 {@link PALayer}. However * this basic network contains all algorithmic components. * * @return a basic Network */ internal Network.Network CreateBasicNetwork() { Parameters p = NetworkDemoHarness.GetParameters(); p = p.Union(NetworkDemoHarness.GetNetworkDemoTestEncoderParams()); p.SetParameterByKey(Parameters.KEY.MIN_THRESHOLD, 22); // 22 18 p.SetParameterByKey(Parameters.KEY.ACTIVATION_THRESHOLD, 16); // 18 p.SetParameterByKey(Parameters.KEY.STIMULUS_THRESHOLD, 0.0); // 0.0 p.SetParameterByKey(Parameters.KEY.CELLS_PER_COLUMN, 1); // 1 Region r = Network.Network.CreateRegion("Region 1"); PALayer <IInference> l = new PALayer <IInference>("Layer 2/3", null, p); l.SetPADepolarize(0.0); // 0.25 l.SetVerbosity(0); PASpatialPooler sp = new PASpatialPooler(); string infile = "rec-center-15m.csv"; // This is how easy it is to create a full running Network! return(Network.Network.Create("Network API Demo", p) .Add(r.Add(l.AlterParameter(Parameters.KEY.AUTO_CLASSIFY, true) .Add(Anomaly.Create()) .Add(new TemporalMemory()) .Add(sp) .Add(Sensor <FileInfo> .Create(FileSensor.Create, SensorParams.Create(SensorParams.Keys.Path, "", ResourceLocator.Path(typeof(Resources), infile))))))); }
public void TestObservableFromFile() { object[] n = { "some name", makeFileObservable() }; SensorParams parms = SensorParams.Create(SensorParams.Keys.Obs, n); Sensor <ObservableSensor <string[]> > sensor = Sensor <ObservableSensor <string[]> > .Create(ObservableSensor <string[]> .Create, parms); var inputStream = sensor.GetInputStream(); long count = inputStream.Count(); Assert.AreEqual(4391, count); }
public void TestOpenObservableWithExplicitEntry() { Publisher manual = Publisher.GetBuilder() .AddHeader("timestamp,consumption") .AddHeader("datetime,float") .AddHeader("B") .Build(); object[] n = { "some name", manual }; SensorParams parms = SensorParams.Create(SensorParams.Keys.Obs, n); Sensor <ObservableSensor <string[]> > sensor = Sensor <ObservableSensor <string[]> > .Create(ObservableSensor <string[]> .Create, parms); // Test input is "sequenced" and is processed by underlying HTMSensor string[] expected = { "[0, 7/2/10 0:00, 21.2]", "[1, 7/2/10 1:00, 34.0]", "[2, 7/2/10 2:00, 40.4]", "[3, 7/2/10 3:00, 123.4]" }; int i = 0; var t = new Task(() => { sensor.GetInputStream().ForEach(l => { Console.WriteLine(Arrays.ToString((string[])l)); Assert.AreEqual(expected[i++], Arrays.ToString((string[])l)); }); }); string[] entries = { "7/2/10 0:00,21.2", "7/2/10 1:00,34.0", "7/2/10 2:00,40.4", "7/2/10 3:00,123.4", }; manual.OnNext(entries[0]); manual.OnNext(entries[1]); manual.OnNext(entries[2]); manual.OnNext(entries[3]); t.Start(); try { t.Wait(); } catch (Exception e) { Assert.Fail(e.ToString()); } }
public void TestProcessCategories() { object[] n = { "some name", ResourceLocator.Path(typeof(Resources), "rec-center-hourly-4period-cat.csv") }; Sensor <FileInfo> sensor2 = Sensor <FileInfo> .Create( FileSensor.Create, SensorParams.Create(SensorParams.Keys.Path, n)); Header header = new Header(sensor2.GetMetaInfo()); Assert.AreEqual("[T, B, C]", Arrays.ToString(header.GetFlags().ToArray())); }
public void TestCategoryEncoderCreation() { Sensor <FileInfo> sensor = Sensor <FileInfo> .Create( FileSensor.Create, SensorParams.Create( SensorParams.Keys.Path, "", ResourceLocator.Path(typeof(Resources), "rec-center-hourly-4period-cat.Csv"))); // Cast the ValueList to the more complex type (Header) HTMSensor <FileInfo> htmSensor = (HTMSensor <FileInfo>)sensor; Header meta = (Header)htmSensor.GetMetaInfo(); Assert.IsTrue(meta.GetFieldTypes().TrueForAll( l => l.Equals(FieldMetaType.DateTime) || l.Equals(FieldMetaType.Float) || l.Equals(FieldMetaType.List))); Assert.IsTrue(meta.GetFieldNames().TrueForAll( l => l.Equals("timestamp") || l.Equals("consumption") || l.Equals("type"))); Assert.IsTrue(meta.GetFlags().TrueForAll( l => l.Equals(SensorFlags.T) || l.Equals(SensorFlags.B) || l.Equals(SensorFlags.C))); // Set the parameters on the sensor. // This enables it to auto-configure itself; a step which will // be done at the Region level. Encoder <object> multiEncoder = htmSensor.GetEncoder(); Assert.IsNotNull(multiEncoder); Assert.IsTrue(multiEncoder is MultiEncoder); // Set the Local parameters on the Sensor htmSensor.InitEncoder(GetCategoryEncoderParams()); List <EncoderTuple> encoders = multiEncoder.GetEncoders(multiEncoder); Assert.AreEqual(3, encoders.Count); DateEncoder dateEnc = (DateEncoder)encoders[1].GetEncoder(); SDRCategoryEncoder catEnc = (SDRCategoryEncoder)encoders[2].GetEncoder(); Assert.AreEqual("[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0]", Arrays.ToString(catEnc.Encode("ES"))); // Now test the encoding of an input row Map <string, object> d = new Map <string, object>(); d.Add("timestamp", dateEnc.Parse("7/12/10 13:10")); d.Add("consumption", 35.3); d.Add("type", "ES"); int[] output = multiEncoder.Encode(d); int[] expected = { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0 }; Debug.WriteLine(Arrays.ToString(expected)); Debug.WriteLine(Arrays.ToString(output)); Assert.IsTrue(Arrays.AreEqual(expected, output)); }
public void TestInputIntegerArray() { Sensor <FileInfo> sensor = Sensor <FileInfo> .Create(FileSensor.Create, SensorParams.Create(SensorParams.Keys.Path, "", ResourceLocator.Path(typeof(Resources), "1_100.Csv"))); HTMSensor <FileInfo> htmSensor = (HTMSensor <FileInfo>)sensor; htmSensor.InitEncoder(GetArrayTestParams()); // Ensure that the HTMSensor's output stream can be retrieved more than once. FanOutStream <int[]> outputStream = (FanOutStream <int[]>)htmSensor.GetOutputStream(); Assert.AreEqual(884, ((int[])outputStream.First()).Length); }
public void TestAlgorithmRepetitionDetection() { Parameters p = NetworkTestHarness.GetParameters(); p = p.Union(NetworkTestHarness.GetDayDemoTestEncoderParams()); p.SetParameterByKey(Parameters.KEY.RANDOM, new MersenneTwister(42)); // -- No overlap Net.Network.Network n = Net.Network.Network.Create("test network", p) .Add(Net.Network.Network.CreateRegion("r1") .Add(Net.Network.Network.CreateLayer <IInference>("2/3", p) .AlterParameter(Parameters.KEY.AUTO_CLASSIFY, true) .Add(new TemporalMemory())) .Add(Net.Network.Network.CreateLayer <IInference>("4", p) .Add(Sensor <FileSensor> .Create(FileSensor.Create, SensorParams.Create( SensorParams.Keys.Path, "", ResourceLocator.Path(typeof(Resources), "days-of-week.Csv")))) .Add(new SpatialPooler())) .Connect("2/3", "4")); Region r = n.Lookup("r1"); Assert.IsTrue(r.layersDistinct); LayerMask flags = r.flagAccumulator; flags ^= LayerMask.SpatialPooler; flags ^= LayerMask.TemporalMemory; flags ^= LayerMask.ClaClassifier; Assert.AreEqual(LayerMask.None, flags); Assert.AreEqual(r.Lookup("2/3").GetMask(), (LayerMask.TemporalMemory | LayerMask.ClaClassifier)); Assert.AreEqual(r.Lookup("4").GetMask(), LayerMask.SpatialPooler); // -- Test overlap detection n = Net.Network.Network.Create("test network", p) .Add(Net.Network.Network.CreateRegion("r1") .Add(Net.Network.Network.CreateLayer <IInference>("2/3", p) .AlterParameter(Parameters.KEY.AUTO_CLASSIFY, true) .Add(new TemporalMemory())) .Add(Net.Network.Network.CreateLayer <IInference>("4", p) .Add(Sensor <FileSensor> .Create(FileSensor.Create, SensorParams.Create( SensorParams.Keys.Path, "", ResourceLocator.Path(typeof(Resources), "days-of-week.Csv")))) .Add(new TemporalMemory()) .Add(new SpatialPooler())) .Connect("2/3", "4")); r = n.Lookup("r1"); Assert.IsFalse(r.layersDistinct); Assert.AreEqual(r.Lookup("2/3").GetMask(), (LayerMask.TemporalMemory | LayerMask.ClaClassifier)); Assert.AreEqual(r.Lookup("4").GetMask(), (LayerMask.SpatialPooler | LayerMask.TemporalMemory)); }
public void TestSensorTerminalOperationDetection() { Sensor <FileInfo> sensor = Sensor <FileInfo> .Create( FileSensor.Create, SensorParams.Create( SensorParams.Keys.Path, "", ResourceLocator.Path(typeof(Resources), "rec-center-hourly-small.Csv"))); HTMSensor <FileInfo> htmSensor = (HTMSensor <FileInfo>)sensor; // We haven't done anything with the stream yet, so it should not be terminal Assert.IsFalse(htmSensor.IsTerminal()); ((BatchedCsvStream <string[]>)htmSensor.GetInputStream()).ForEach(l => Console.WriteLine(Arrays.ToString((string[])l))); // Should now be terminal after operating on the stream Assert.IsTrue(htmSensor.IsTerminal()); }
public void testMetaFormation_NO_HEADER_FLAGS() { Sensor <FileInfo> sensor = Sensor <FileInfo> .Create( FileSensor.Create, SensorParams.Create(SensorParams.Keys.Path, "", ResourceLocator.Path(typeof(Resources), "rec-center-hourly-small-noheaderflags.Csv"))); // Cast the ValueList to the more complex type (Header) Header meta = (Header)sensor.GetMetaInfo(); Assert.IsTrue(meta.GetFieldTypes().TrueForAll( l => l.Equals(FieldMetaType.DateTime) || l.Equals(FieldMetaType.Float))); Assert.IsTrue(meta.GetFieldNames().TrueForAll( l => l.Equals("timestamp") || l.Equals("consumption"))); Assert.IsTrue(meta.GetFlags().TrueForAll( l => l.Equals(SensorFlags.B))); }
/** * Creates a basic {@link Network} with 1 {@link Region} and 1 {@link PALayer}. However * this basic network contains all algorithmic components. * * @return a basic Network */ internal Network.Network CreateBasicNetworkCla() { Parameters p = NetworkDemoHarness.GetParameters(); p = p.Union(NetworkDemoHarness.GetNetworkDemoTestEncoderParams()); // This is how easy it is to create a full running Network! return(Network.Network.Create("Network API Demo", p) .Add(Network.Network.CreateRegion("Region 1") .Add(Network.Network.CreateLayer("Layer 2/3", p) .AlterParameter(Parameters.KEY.AUTO_CLASSIFY, true) .Add(Anomaly.Create()) .Add(new TemporalMemory()) .Add(new Algorithms.SpatialPooler()) .Add(Sensor <FileInfo> .Create(FileSensor.Create, SensorParams.Create(SensorParams.Keys.Path, "", "rec-center-hourly.csv")))))); }
public void TestSensorMultipleStreamCreation() { Sensor <FileInfo> sensor = Sensor <FileInfo> .Create( FileSensor.Create, SensorParams.Create( SensorParams.Keys.Path, "", ResourceLocator.Path(typeof(Resources), "rec-center-hourly-small.Csv"))); HTMSensor <FileInfo> htmSensor = (HTMSensor <FileInfo>)sensor; htmSensor.InitEncoder(GetTestEncoderParams()); // Ensure that the HTMSensor's output stream can be retrieved more than once. IStream <int[]> outputStream = htmSensor.GetOutputStream(); IStream <int[]> outputStream2 = htmSensor.GetOutputStream(); IStream <int[]> outputStream3 = htmSensor.GetOutputStream(); // Check to make sure above multiple retrieval doesn't flag the underlying stream as operated upon Assert.IsFalse(htmSensor.IsTerminal()); Assert.AreEqual(17, outputStream.Count()); //After the above we cannot request a new stream, so this will fail //however, the above streams that were already requested should be unaffected. Assert.IsTrue(htmSensor.IsTerminal(), "Terminal sensor stream expected"); try { //@SuppressWarnings("unused") IStream <int[]> outputStream4 = (Stream <int[]>)htmSensor.GetOutputStream(); Assert.Fail(); } catch (Exception e) { Assert.AreEqual("Stream is already \"terminal\" (operated upon or empty)", e.Message); } //These Streams were created before operating on a stream Assert.AreEqual(17, outputStream2.Count()); Assert.AreEqual(17, outputStream3.Count()); // Verify that different streams are retrieved. Assert.IsFalse(outputStream.GetHashCode() == outputStream2.GetHashCode()); Assert.IsFalse(outputStream2.GetHashCode() == outputStream3.GetHashCode()); }
public void TestHTMSensor_HotGym() { Object[] n = { "some name", ResourceLocator.Path("rec-center-hourly-small.csv") }; HTMSensor <FileInfo> sensor = (HTMSensor <FileInfo>) Sensor <FileInfo> .Create( FileSensor.Create, SensorParams.Create(SensorParams.Keys.Path, n)); sensor.InitEncoder(GetTestEncoderParams()); SerialConfig config = new SerialConfig("testHTMSensor_HotGym"); IPersistenceAPI api = Persistence.Get(config); byte[] bytes = api.Write(sensor); Assert.IsNotNull(bytes); Assert.IsTrue(bytes.Length > 0); HTMSensor <FileInfo> serializedSensor = api.Read <HTMSensor <FileInfo> >(bytes); bool b = serializedSensor.IsDeepEqual(sensor); DeepCompare(serializedSensor, sensor); Assert.IsTrue(b); }
public void TestSerializeObservableSensor() { PublisherSupplier supplier = PublisherSupplier.GetBuilder() .AddHeader("dayOfWeek") .AddHeader("darr") .AddHeader("B").Build(); ObservableSensor <string[]> oSensor = new ObservableSensor <string[]>( SensorParams.Create(SensorParams.Keys.Obs, new Object[] { "name", supplier })); SerialConfig config = new SerialConfig("testSerializeObservableSensor", SerialConfig.SERIAL_TEST_DIR); IPersistenceAPI api = Persistence.Get(config); byte[] bytes = api.Write(oSensor); ObservableSensor <string[]> serializedOSensor = api.Read <ObservableSensor <string[]> >(bytes); bool b = serializedOSensor.IsDeepEqual(oSensor); DeepCompare(serializedOSensor, oSensor); Assert.IsTrue(b); }
public void TestInputIntegerArray() { Publisher manual = Publisher.GetBuilder() .AddHeader("sdr_in") .AddHeader("sarr") .AddHeader("B") .Build(); Sensor <ObservableSensor <string[]> > sensor = Sensor <ObservableSensor <string[]> > .Create( ObservableSensor <string[]> .Create, SensorParams.Create(SensorParams.Keys.Obs, new Object[] { "name", manual })); int i = 0; var t = new Task(() => { BatchedCsvStream <string[]> iStream = (BatchedCsvStream <string[]>)sensor.GetInputStream(); Stream <string[]> oStream = (Stream <string[]>)iStream._contentStream; Assert.AreEqual(2, ((string[])oStream.First()).Length); }); //(t = new Thread() { // int i = 0; // public void run() // { // assertEquals(2, ((String[])sensor.getInputStream().findFirst().get()).length); // } //}).start(); int[][] ia = getArrayFromFile(ResourceLocator.Path(typeof(Resources), "1_100.csv")); manual.OnNext(Arrays.ToString(ia[0]).Trim()); t.Start(); try { t.Wait(); } catch (Exception e) { Console.WriteLine(e); Assert.Fail(); } }
public void TestHTMSensor_DaysOfWeek() { Object[] n = { "some name", ResourceLocator.Path("days-of-week.csv") }; HTMSensor <FileInfo> sensor = (HTMSensor <FileInfo>) Sensor <FileInfo> .Create( FileSensor.Create, SensorParams.Create(SensorParams.Keys.Path, n)); Parameters p = GetParameters(); p = p.Union(NetworkTestHarness.GetDayDemoTestEncoderParams()); sensor.InitEncoder(p); SerialConfig config = new SerialConfig("testHTMSensor_DaysOfWeek", SerialConfig.SERIAL_TEST_DIR); IPersistenceAPI api = Persistence.Get(config); byte[] bytes = api.Write(sensor); HTMSensor <FileInfo> serializedSensor = api.Read <HTMSensor <FileInfo> >(bytes); bool b = serializedSensor.IsDeepEqual(sensor); DeepCompare(serializedSensor, sensor); Assert.IsTrue(b); }
public void TestFileSensorCreation() { object[] n = { "some name", ResourceLocator.Path(typeof(Resources), "rec-center-hourly.csv") }; SensorParams parms = SensorParams.Create(SensorParams.Keys.Path, n); Sensor <FileInfo> sensor = Sensor <FileInfo> .Create(FileSensor.Create, parms); Assert.IsNotNull(sensor); Assert.IsNotNull(sensor.GetSensorParams()); SensorParams sp = sensor.GetSensorParams(); Assert.AreEqual("some name", sp.Get("FILE")); Assert.AreEqual(null, sp.Get("NAME")); Assert.AreEqual(ResourceLocator.Path(typeof(Resources), "rec-center-hourly.csv"), sp.Get("PATH")); Sensor <FileInfo> sensor2 = Sensor <FileInfo> .Create(FileSensor.Create, SensorParams.Create(SensorParams.Keys.Path, n)); Assert.IsNotNull(sensor2); Assert.IsNotNull(sensor2.GetSensorParams()); sp = sensor2.GetSensorParams(); Assert.AreEqual("some name", sp.Get("FILE")); Assert.AreEqual(null, sp.Get("NAME")); Assert.AreEqual(ResourceLocator.Path(typeof(Resources), "rec-center-hourly.csv"), sp.Get("PATH")); }
public void TestDateEncoderNotInitialized() { Publisher manual = Publisher.GetBuilder() .AddHeader("foo") .AddHeader("datetime") .AddHeader("T") .Build(); Sensor <FileInfo> sensor = Sensor <FileInfo> .Create(ObservableSensor <string[]> .Create, SensorParams.Create( SensorParams.Keys.Obs, "", manual)); Map <string, Map <string, object> > fieldEncodings = SetupMap(null, 25, 3, 0, 0, 0, 0.1, null, null, null, "consumption", "float", "RandomDistributedScalarEncoder"); Parameters @params = Parameters.GetEncoderDefaultParameters(); @params.SetParameterByKey(Parameters.KEY.FIELD_ENCODING_MAP, fieldEncodings); HTMSensor <FileInfo> htmSensor = (HTMSensor <FileInfo>)sensor; htmSensor.InitEncoder(@params); }
private Net.Network.Network GetLoadedHotGymHierarchy() { Parameters p = NetworkTestHarness.GetParameters(); p = p.Union(NetworkTestHarness.GetNetworkDemoTestEncoderParams()); p.SetParameterByKey(Parameters.KEY.RANDOM, new MersenneTwister(42)); Net.Network.Network network = Net.Network.Network.Create("test network", p) .Add(Net.Network.Network.CreateRegion("r1") .Add(Net.Network.Network.CreateLayer("2", p) .Add(Anomaly.Create()) .Add(new TemporalMemory())) .Add(Net.Network.Network.CreateLayer("3", p) .Add(new SpatialPooler())) .Connect("2", "3")) .Add(Net.Network.Network.CreateRegion("r2") .Add(Net.Network.Network.CreateLayer("1", p) .AlterParameter(Parameters.KEY.AUTO_CLASSIFY, true) .Add(new TemporalMemory()) .Add(new SpatialPooler()) .Add(FileSensor.Create(Net.Network.Sensor.FileSensor.Create, SensorParams.Create( SensorParams.Keys.Path, "", ResourceLocator.Path("rec-center-hourly.csv")))))) .Connect("r1", "r2"); return(network); }
public void TestSerializeLayer() { Parameters p = NetworkTestHarness.GetParameters().Copy(); p.SetParameterByKey(Parameters.KEY.RANDOM, new MersenneTwister(42)); Map <String, Map <String, Object> > settings = NetworkTestHarness.SetupMap( null, // map 8, // n 0, // w 0, // min 0, // max 0, // radius 0, // resolution null, // periodic null, // clip true, // forced "dayOfWeek", // fieldName "darr", // fieldType (dense array as opposed to sparse array or "sarr") "SDRPassThroughEncoder"); // encoderType p.SetParameterByKey(Parameters.KEY.FIELD_ENCODING_MAP, settings); Sensor <ObservableSensor <string[]> > sensor = Sensor <ObservableSensor <string[]> > .Create( ObservableSensor <string[]> .Create, SensorParams.Create(SensorParams.Keys.Obs, new Object[] { "name", PublisherSupplier.GetBuilder() .AddHeader("dayOfWeek") .AddHeader("darr") .AddHeader("B").Build() })); ILayer layer = Net.Network.Network.CreateLayer("1", p) .AlterParameter(Parameters.KEY.AUTO_CLASSIFY, true) .Add(new SpatialPooler()) .Add(sensor); // Observer obs = new Observer<IInference>() { // @Override public void onCompleted() { } // @Override public void onError(Throwable e) { e.printStackTrace(); } // @Override // public void onNext(Inference spatialPoolerOutput) // { // System.out.println("in onNext()"); // } //}; var obs = Observer.Create <IInference>( spatialPoolerOutput => { Console.WriteLine("in onNext()"); }, e => Console.WriteLine(e), () => { }); layer.Subscribe(obs); layer.Close(); SerialConfig config = new SerialConfig("testSerializeLayer", SerialConfig.SERIAL_TEST_DIR); IPersistenceAPI api = Persistence.Get(config); api.Write(layer); //Serialize above Connections for comparison with same run but unserialized below... ILayer serializedLayer = api.Read <ILayer>(); Assert.AreEqual(serializedLayer, layer); DeepCompare(layer, serializedLayer); // Now change one attribute and see that they are not equal serializedLayer.ResetRecordNum(); Assert.AreNotEqual(serializedLayer, layer); }
private Net.Network.Network CreateAndRunTestTemporalMemoryNetwork() { Publisher manual = Publisher.GetBuilder() .AddHeader("dayOfWeek") .AddHeader("darr") .AddHeader("B").Build(); Sensor <ObservableSensor <String[]> > sensor = Sensor <ObservableSensor <string[]> > .Create( ObservableSensor <string[]> .Create, SensorParams.Create(SensorParams.Keys.Obs, new Object[] { "name", manual })); Parameters p = GetParameters(); Map <String, Map <String, Object> > settings = NetworkTestHarness.SetupMap( null, // map 20, // n 0, // w 0, // min 0, // max 0, // radius 0, // resolution null, // periodic null, // clip true, // forced "dayOfWeek", // fieldName "darr", // fieldType (dense array as opposed to sparse array or "sarr") "SDRPassThroughEncoder"); // encoderType p.SetParameterByKey(Parameters.KEY.FIELD_ENCODING_MAP, settings); Net.Network.Network network = Net.Network.Network.Create("test network", p) .Add(Net.Network.Network.CreateRegion("r1") .Add(Net.Network.Network.CreateLayer("1", p) .Add(new TemporalMemory()) .Add(sensor))); network.Start(); network.Observe().Subscribe(i => { }, e => Console.WriteLine(e)); // new Subscriber<Inference>() { // @Override public void onCompleted() { } // @Override public void onError(Throwable e) { e.printStackTrace(); } // @Override public void onNext(Inference i) { } //}); int[] input1 = new int[] { 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0 }; int[] input2 = new int[] { 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0 }; int[] input3 = new int[] { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0 }; int[] input4 = new int[] { 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0 }; int[] input5 = new int[] { 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0 }; int[] input6 = new int[] { 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1 }; int[] input7 = new int[] { 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 }; int[][] inputs = { input1, input2, input3, input4, input5, input6, input7 }; // Run until TemporalMemory is "warmed up". int timeUntilStable = 602; for (int j = 0; j < timeUntilStable; j++) { for (int i = 0; i < inputs.Length; i++) { manual.OnNext(Arrays.ToString(inputs[i])); } } manual.OnComplete(); ILayer l = network.Lookup("r1").Lookup("1"); try { l.GetLayerThread().Wait(); Console.WriteLine(Arrays.ToString(SDR.AsCellIndices(l.GetConnections().GetActiveCells()))); } catch (Exception e) { Assert.AreEqual(typeof(ThreadInterruptedException), e.GetType()); } return(network); }
private Net.Network.Network CreateAndRunTestSpatialPoolerNetwork(int start, int runTo) { Publisher manual = Publisher.GetBuilder() .AddHeader("dayOfWeek") .AddHeader("darr") .AddHeader("B") .Build(); Sensor <ObservableSensor <string[]> > sensor = Sensor <ObservableSensor <String[]> > .Create( ObservableSensor <string[]> .Create, SensorParams.Create(SensorParams.Keys.Obs, new Object[] { "name", manual })); Parameters p = NetworkTestHarness.GetParameters().Copy(); p.SetParameterByKey(Parameters.KEY.RANDOM, new XorshiftRandom(42)); Map <String, Map <String, Object> > settings = NetworkTestHarness.SetupMap( null, // map 8, // n 0, // w 0, // min 0, // max 0, // radius 0, // resolution null, // periodic null, // clip true, // forced "dayOfWeek", // fieldName "darr", // fieldType (dense array as opposed to sparse array or "sarr") "SDRPassThroughEncoder"); // encoderType p.SetParameterByKey(Parameters.KEY.FIELD_ENCODING_MAP, settings); Net.Network.Network network = Net.Network.Network.Create("test network", p) .Add(Net.Network.Network.CreateRegion("r1") .Add(Net.Network.Network.CreateLayer("1", p) .Add(new SpatialPooler()) .Add(sensor))); network.Start(); int[][] inputs = new int[7][]; inputs[0] = new int[] { 1, 1, 0, 0, 0, 0, 0, 1 }; inputs[1] = new int[] { 1, 1, 1, 0, 0, 0, 0, 0 }; inputs[2] = new int[] { 0, 1, 1, 1, 0, 0, 0, 0 }; inputs[3] = new int[] { 0, 0, 1, 1, 1, 0, 0, 0 }; inputs[4] = new int[] { 0, 0, 0, 1, 1, 1, 0, 0 }; inputs[5] = new int[] { 0, 0, 0, 0, 1, 1, 1, 0 }; inputs[6] = new int[] { 0, 0, 0, 0, 0, 1, 1, 1 }; int[] expected0 = new int[] { 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0 }; int[] expected1 = new int[] { 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1 }; int[] expected2 = new int[] { 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1 }; int[] expected3 = new int[] { 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }; int[] expected4 = new int[] { 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }; int[] expected5 = new int[] { 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 }; int[] expected6 = new int[] { 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1 }; int[][] expecteds = new int[][] { expected0, expected1, expected2, expected3, expected4, expected5, expected6 }; //TestObserver<Inference> tester; int test = 0; network.Observe().Subscribe( spatialPoolerOutput => { Console.WriteLine(test + " E: " + Arrays.ToString(expecteds[test]) + " -- " + "A: " + Arrays.ToString(spatialPoolerOutput.GetSdr())); Assert.IsTrue(Arrays.AreEqual(expecteds[test], spatialPoolerOutput.GetSdr())); test++; }, e => { Console.WriteLine(e); }, () => { }); // Now push some fake data through so that "onNext" is called above for (int i = start; i <= runTo; i++) { manual.OnNext(Arrays.ToString(inputs[i])); } manual.OnComplete(); try { network.Lookup("r1").Lookup("1").GetLayerThread().Wait(); } catch (Exception e) { Console.WriteLine(e); } //checkObserver(tester); return(network); }
public void TestThreadedPublisher() { Publisher manual = Publisher.GetBuilder() .AddHeader("dayOfWeek") .AddHeader("darr") .AddHeader("B").Build(); Sensor <ObservableSensor <string[]> > sensor = Sensor <ObservableSensor <string[]> > .Create( ObservableSensor <string[]> .Create, SensorParams.Create(SensorParams.Keys.Obs, new Object[] { "name", manual })); Parameters p = GetParameters(); Map <String, Map <String, Object> > settings = NetworkTestHarness.SetupMap( null, // map 20, // n 0, // w 0, // min 0, // max 0, // radius 0, // resolution null, // periodic null, // clip true, // forced "dayOfWeek", // fieldName "darr", // fieldType (dense array as opposed to sparse array or "sarr") "SDRPassThroughEncoder"); // encoderType p.SetParameterByKey(Parameters.KEY.FIELD_ENCODING_MAP, settings); Net.Network.Network network = Net.Network.Network.Create("test network", p) .Add(Net.Network.Network.CreateRegion("r1") .Add(Net.Network.Network.CreateLayer <IInference>("1", p) .Add(new TemporalMemory()) .Add(sensor))); network.Start(); network.Observe().Subscribe(Observer.Create <IInference>( output => { }, Console.WriteLine, () => { } )); int[] input1 = new int[] { 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0 }; int[] input2 = new int[] { 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0 }; int[] input3 = new int[] { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0 }; int[] input4 = new int[] { 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0 }; int[] input5 = new int[] { 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0 }; int[] input6 = new int[] { 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1 }; int[] input7 = new int[] { 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 }; int[][] inputs = { input1, input2, input3, input4, input5, input6, input7 }; // Now push some warm up data through so that "onNext" is called above int timeUntilStable = 602; for (int j = 0; j < timeUntilStable; j++) { for (int i = 0; i < inputs.Length; i++) { manual.OnNext(Arrays.ToString(inputs[i])); } } manual.OnComplete(); ILayer l = network.Lookup("r1").Lookup("1"); try { l.GetLayerThread().Wait(); ComputeCycle cc = l.GetInference().GetComputeCycle(); TEST_AGGREGATION[TM_NAPI] = SDR.AsCellIndices(cc.activeCells); } catch (Exception e) { Debug.WriteLine(e.ToString()); Assert.IsInstanceOfType(e, typeof(ThreadAbortException)); } }
public void TestBoolEncoderNotInitialized() { Publisher manual = Publisher.GetBuilder() .AddHeader("foo") .AddHeader("bool") .AddHeader("") .Build(); Sensor <FileInfo> sensor = Sensor <FileInfo> .Create(ObservableSensor <string[]> .Create, SensorParams.Create( SensorParams.Keys.Obs, "", manual)); Map <string, Map <string, object> > fieldEncodings = SetupMap(null, 0, // n 0, // w 0, 0, 0, 0, null, null, null, "timestamp", "datetime", "DateEncoder"); Parameters @params = Parameters.GetEncoderDefaultParameters(); @params.SetParameterByKey(Parameters.KEY.FIELD_ENCODING_MAP, fieldEncodings); HTMSensor <FileInfo> htmSensor = (HTMSensor <FileInfo>)sensor; htmSensor.InitEncoder(@params); }
public void Test2LayerAssemblyWithSensor() { 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>("2/3", p) .AlterParameter(Parameters.KEY.AUTO_CLASSIFY, true) .Add(new TemporalMemory())) .Add(Net.Network.Network.CreateLayer <IInference>("4", p) .Add(Sensor <FileSensor> .Create(FileSensor.Create, SensorParams.Create( SensorParams.Keys.Path, "", ResourceLocator.Path(typeof(Resources), "days-of-week.Csv")))) .Add(new SpatialPooler())) .Connect("2/3", "4")); int[][] inputs = new int[7][]; inputs[0] = new[] { 1, 1, 0, 0, 0, 0, 0, 1 }; inputs[1] = new[] { 1, 1, 1, 0, 0, 0, 0, 0 }; inputs[2] = new[] { 0, 1, 1, 1, 0, 0, 0, 0 }; inputs[3] = new[] { 0, 0, 1, 1, 1, 0, 0, 0 }; inputs[4] = new[] { 0, 0, 0, 1, 1, 1, 0, 0 }; inputs[5] = new[] { 0, 0, 0, 0, 1, 1, 1, 0 }; inputs[6] = new[] { 0, 0, 0, 0, 0, 1, 1, 1 }; Region r1 = n.Lookup("r1"); // Observe the top layer r1.Lookup("4").Observe().Subscribe( // next i => { Console.WriteLine("onNext() called (4)"); Assert.IsTrue(Arrays.AreEqual(inputs[idx0++], i.GetEncoding())); }, //error e => { Console.WriteLine(e); }, //completed () => { Console.WriteLine("onCompleted() called (4)"); } ); //r1.Lookup("4").Observe().Subscribe(new Subscriber<Inference>() //{ // public void onCompleted() { } // public void onError(Throwable e) { e.printStackTrace(); } // public void onNext(Inference i) // { // Assert.IsTrue(Arrays.equals(inputs[idx0++], i.GetEncoding())); // } //}); // Observe the bottom layer r1.Lookup("2/3").Observe().Subscribe( // next i => { Console.WriteLine("onNext() called (2/3)"); Assert.IsTrue(Arrays.AreEqual(inputs[idx1++], i.GetEncoding())); }, //error e => { Console.WriteLine(e); }, //completed () => { Console.WriteLine("onCompleted() called (2/3)"); } ); //r1.Lookup("2/3").Observe().Subscribe(new Subscriber<Inference>() { // public void onCompleted() { } // public void onError(Throwable e) { e.printStackTrace(); } // public void onNext(Inference i) // { // Assert.IsTrue(Arrays.equals(inputs[idx1++], i.GetEncoding())); // } //}); // Observe the Region output r1.Observe().Subscribe( // next i => { Console.WriteLine("onNext() called (out)"); Assert.IsTrue(Arrays.AreEqual(inputs[idx2++], i.GetEncoding())); }, //error e => { Console.WriteLine(e); }, //completed () => { Console.WriteLine("onCompleted() called (out)"); } ); //r1.Observe().Subscribe(new Subscriber<Inference>() { // public void onCompleted() { } // public void onError(Throwable e) { e.printStackTrace(); } // public void onNext(Inference i) // { // Assert.IsTrue(Arrays.equals(inputs[idx2++], i.GetEncoding())); // } //}); r1.Start(); try { r1.Lookup("4").GetLayerThread().Wait(); } catch (Exception e) { Console.WriteLine(e); } Assert.AreEqual(7, idx0); Assert.AreEqual(7, idx1); Assert.AreEqual(7, idx2); }
public void TestHalt() { 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(Sensor <FileSensor> .Create(FileSensor.Create, SensorParams.Create( SensorParams.Keys.Path, "", ResourceLocator.Path(typeof(Resources), "days-of-week.csv")))) .Add(new SpatialPooler())) .Connect("1", "2") .Connect("2", "3") .Connect("3", "4")); Region r1 = n.Lookup("r1"); int seq = 0; r1.Observe().Subscribe( // next i => { if (seq == 2) { isHalted = true; } seq++; }, //error e => { Console.WriteLine(e); }, //completed () => { Console.WriteLine("onCompleted() called"); } ); //r1.Observe().Subscribe(new Subscriber<Inference>() { // int seq = 0; // public void onCompleted() // { // // System.Out.println("onCompleted() called"); // } // public void onError(Throwable e) { e.printStackTrace(); } // public void onNext(Inference i) // { // if (seq == 2) // { // isHalted = true; // } // seq++; // // System.Out.println("output: " + i.GetSDR()); // } //}); new Thread(() => { while (!isHalted) { try { Thread.Sleep(1); } catch (Exception e) { Console.WriteLine(e); } } r1.Halt(); }).Start(); // (new Thread() // { // public void run() // { // while (!isHalted) // { // try { Thread.Sleep(1); } catch (Exception e) { e.printStackTrace(); } // } // r1.Halt(); // } //}).Start(); r1.Start(); try { r1.Lookup("4").GetLayerThread().Wait(); } catch (Exception e) { Console.WriteLine(e); } }
public void TestInternalEncoderCreation() { Sensor <FileInfo> sensor = Sensor <FileInfo> .Create( FileSensor.Create, SensorParams.Create( SensorParams.Keys.Path, "", ResourceLocator.Path(typeof(Resources), "rec-center-hourly.Csv"))); // Cast the ValueList to the more complex type (Header) HTMSensor <FileInfo> htmSensor = (HTMSensor <FileInfo>)sensor; Header meta = (Header)htmSensor.GetMetaInfo(); Assert.IsTrue(meta.GetFieldTypes().TrueForAll( l => l.Equals(FieldMetaType.DateTime) || l.Equals(FieldMetaType.Float))); Assert.IsTrue(meta.GetFieldNames().TrueForAll( l => l.Equals("timestamp") || l.Equals("consumption"))); Assert.IsTrue(meta.GetFlags().TrueForAll( l => l.Equals(SensorFlags.T) || l.Equals(SensorFlags.B))); // Set the parameters on the sensor. // This enables it to auto-configure itself; a step which will // be done at the Region level. Encoder <object> multiEncoder = htmSensor.GetEncoder(); Assert.IsNotNull(multiEncoder); Assert.IsTrue(multiEncoder is MultiEncoder); // Set the Local parameters on the Sensor htmSensor.InitEncoder(GetTestEncoderParams()); List <EncoderTuple> encoders = multiEncoder.GetEncoders(multiEncoder); Assert.AreEqual(2, encoders.Count); // Test date specific encoder configuration // // All encoders in the MultiEncoder are accessed in a particular // order (the alphabetical order their corresponding fields are in), // so alphabetically "consumption" proceeds "timestamp" // so we need to ensure that the proper order is preserved (i.E. exists at index 1) DateEncoder dateEnc = (DateEncoder)encoders[1].GetEncoder(); try { dateEnc.ParseEncode("7/12/10 13:10"); dateEnc.ParseEncode("7/12/2010 13:10"); // Should fail here due to conflict with configured format dateEnc.ParseEncode("--13:10 7-12-10"); Assert.Fail(); } catch (Exception e) { Assert.IsInstanceOfType(e, typeof(FormatException)); //Assert.AreEqual("Invalid format: \"13:10 7/12/10\" is malformed at \":10 7/12/10\"", e.Message); } RandomDistributedScalarEncoder rdse = (RandomDistributedScalarEncoder)encoders[0].GetEncoder(); int[] encoding = rdse.Encode(35.3); Console.WriteLine(Arrays.ToString(encoding)); // Now test the encoding of an input row Map <string, object> d = new Map <string, object>(); d.Add("timestamp", dateEnc.Parse("7/12/10 13:10")); d.Add("consumption", 35.3); int[] output = multiEncoder.Encode(d); int[] expected = { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; Console.WriteLine(Arrays.ToString(expected)); Console.WriteLine(Arrays.ToString(output)); Assert.IsTrue(Arrays.AreEqual(expected, output)); }