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); } }
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()); }
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); } }
/** * 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()); }
/** * 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()); }
/** * 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()); }
/** * 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()); }
/** * 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(); } }
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()); } }
/** * 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()); }
/// <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); }
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))); }
/// <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); }
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")); } }
public void SetEncoder(MultiEncoder encoder) { this.encoder = encoder; }
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); }
/// <summary> /// Constructs a new MultiCodec object. /// </summary> public MultiCodec() { _encoder = new MultiEncoder <T>(); _decoder = new MultiDecoder <T>(); }
protected BaseRxLayer(Parameters @params, MultiEncoder e, SpatialPooler sp, TemporalMemory tm, bool?autoCreateClassifiers, Anomaly a) : base(@params, e, sp, tm, autoCreateClassifiers, a) { }
/// <summary> /// Returns the classifier(s) for this layer /// </summary> /// <returns></returns> public abstract IClassifier GetClassifier(MultiEncoder encoder, string predictedFieldName);
/// <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); }
/// <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);
/** * Sets the {@link MultiEncoder} on this Network * @param e */ public void SetEncoder(MultiEncoder e) { _encoder = e; }