Hi Takenori,

Running a swarm is always an option. Can you give me push rights to your
repo and check in some (small) example of data so I can have something to
run, and I'll take a look? I'll see if I can get it up and running and push
it back to your repo...

Cheers,
David

On Wed, Nov 4, 2015 at 10:30 PM, Takenori Sato <[email protected]> wrote:

> Hi David, thanks for your answers!
>
> I tried some, like adding SpatialPooler, changing n/w, but no luck.
>
> Perhaps I should run swarming in python against my data,
> and study the configuration produced.
>
> - Takenori
>
> On Thu, Nov 5, 2015 at 3:44 AM, cogmission (David Ray) <
> [email protected]> wrote:
>
>> Hi Takenori,
>>
>> You might think this is weird (I know I do), but as I am basically just
>> one person writing and supporting HTM.java (with some appreciated help from
>> community members from time to time), I haven't really had the time to
>> **use** NuPIC. Therefore the scope of the questions I can faithfully answer
>> are specific to setting up and using the code, together with any Java
>> related questions. NuPIC configurations that have to do with performance of
>> the HTM (like DateEncoder parameters, the size of W and N; and actual
>> parameter settings - any familiar person who has used NuPIC and struggled
>> with that learning curve can answer you.
>>
>> The default parameters used are those that were in the Python network
>> examples and settings that I have been told are "decent" when asking for
>> help myself. NuPIC parameters are not easy, and require knowledge of the
>> "rules of thumb" (typical rules for usage). For instance, W should be an
>> odd number for reasons having to do with finding the "center" of a series
>> of bits. Also, if you read the class documentation for Encoder.java or
>> base.py (The abstract base encoder for the Python version) files, you will
>> see some discussion for N and W and how they relate to each other.
>>
>> In general, the difference between the ScalarEncoder and the
>> RandomDistributedScalarEncoder is that the ScalarEncoder is a bit more
>> efficient but requires prior knowledge of the min and max values in your
>> expected dataset. The RDSE can be used without prior knowledge of the
>> bounds and so is a nice alternative for unknown data. Most people just use
>> the RDSE.
>>
>> Here's a video that discusses the RDSE:
>> https://www.youtube.com/watch?v=_q5W2Ov6C9E
>>
>> The DateEncoder class Javadoc, and the class file itself (together with
>> DateEncoderTest.java), have lots of documentation in them which illustrate
>> their usage. Basically, a DateEncoder is a compound encoder that has
>> ScalarEncoders inside it which handle different aspects of the date
>> mechanism being used.
>>
>> The SpatialPooler is an integral part of the HTM - you usually want that.
>> The only time when that has been "skipped" is when inserting an encoding
>> scheme of your own and you want to preserve the input format. But that is
>> an extreme corner case, I would advise to use one in your code.
>>
>> Don't worry about multiple regions and layers. The capacity to have
>> multiple regions and layers exists for those who need extra flexibility.
>> The ability to assemble Network hierarchies is mostly a "space saver" for
>> when HTM Hierarchy code is released by Numenta in the future. The "modes"
>> shown in the HotGym Demo are just there for demonstration purposes and
>> really there is no internal concept of "Mode" inside the Network hierarchy.
>> Again, the Mode in the demo is just a switch to instruct the demo to setup
>> different hierarchy styles to show that the output is the same regardless
>> of the number of hierarchical components used to funnel data through.
>>
>> I hope this helps. You can ask Numenta engineers for rules of thumb
>> regarding the individual Parameter settings.
>>
>> Cheers,
>> David
>>
>> On Wed, Nov 4, 2015 at 9:45 AM, Takenori Sato <[email protected]> wrote:
>>
>>> Hi NuPIC community and David,
>>>
>>> I have some questions about how to configure my network with htm.java.
>>>
>>> My use case is to let HTM detect an unexpected high load on a server
>>> through PING response times. But so far, it produces 0.0 for almost any
>>> inputs. Sometimes it returns some value, but which are not reasonable at
>>> all.
>>>
>>> The biggest problem is that I am not sure at all about my
>>> configurations. So I highly suspect my configurations are far from correct
>>> ones.
>>>
>>> For your reference, you can see my codes here:
>>>
>>> CloudSonar project <https://github.com/ggsato/CloudSonar>
>>> HTMAnomalyDetector
>>> <https://github.com/ggsato/CloudSonar/blob/master/src/com/cloudian/analytics/HTMAnomalyDetector.java>
>>>
>>> My network configurations are based on(or I say copy and paste)
>>> NetworkDemoHarness. They are modified slightly where I believe I understand.
>>>
>>> Here're my questions.
>>>
>>> *1. Parameters#getAllDefaultParameters*
>>>
>>> private static Network createNetwork(Sensor<ObservableSensor<String>>
>>> sensor) {
>>> *Parameters p = buildParams();*
>>> p = p.union(buildEncoderParams());
>>> return Network.create("CloudSonar", p)
>>>            .add(Network.createRegion("Region")
>>>                .add(Network.createLayer("Layer", p)
>>>                    .alterParameter(KEY.AUTO_CLASSIFY, Boolean.TRUE)
>>>                    .add(Anomaly.create())
>>>                    .add(new TemporalMemory())
>>>                    .add(sensor)
>>>                    )
>>>                );
>>> }
>>> private static Parameters buildParams() {
>>> return* Parameters.getAllDefaultParameters(); <== THIS ONE*
>>> }
>>>
>>> NetworkDemoHarness#getParameters confused me with many parameters. So I
>>> picked up only the default ones without overriding anything. Can I start
>>> like this?
>>>
>>> Also, are there any resources to learn about those parameters?
>>>
>>> *2. Encoders*
>>>
>>> My inputs are [timestamps, duration_in_micro_sec].
>>>
>>> private static String generateCSVInput(PollingJob job) {
>>> StringBuffer sb = new StringBuffer();
>>> sb.append(FULL_DATE_FORMAT.format(new Date())); *<== TIMESTAMP*
>>> sb.append(CSVUpdateHandler.DELIM);
>>> sb.append(TimeUnit.MICROSECONDS.convert(job.pollingStatus.duration(),
>>> TimeUnit.NANOSECONDS)); *<== DURATION*
>>> return sb.toString();
>>> }
>>>
>>> I borrowed the config from NetworkDemoHarness#getHotGymFieldEncodingMap
>>> and getNetworkDemoFieldEncodingMap(noticed mixed up). Then, modified the
>>> red parts:
>>>
>>>     public static Map<String, Map<String, Object>>
>>> getNetworkFieldEncodingMap() {
>>>         Map<String, Map<String, Object>> fieldEncodings = setupMap(
>>>                 null,
>>>                 0, // n
>>>                 0, // w
>>>                 0, 0, 0, 0, null, null, null,
>>>                 "timestamp", "datetime", "DateEncoder");
>>>         fieldEncodings = setupMap(
>>>                 fieldEncodings,
>>>                 50,
>>>                 21,
>>>                 0, *10000000*, 0, 0.1, null, Boolean.TRUE, null,  *<==
>>> 0 ~ 10 sec*
>>>                 CLASSFIER_FIELD, "int", "ScalarEncoder");
>>>
>>>
>>> fieldEncodings.get("timestamp").put(KEY.DATEFIELD_DOFW.getFieldName(), new
>>> Tuple(1, 1.0)); // Day of week
>>>
>>> fieldEncodings.get("timestamp").put(KEY.DATEFIELD_TOFD.getFieldName(), new
>>> Tuple(5, 4.0)); // Time of day
>>>
>>> fieldEncodings.get("timestamp").put(KEY.DATEFIELD_PATTERN.getFieldName(),
>>> *FULL_DATE*);
>>>
>>>         return fieldEncodings;
>>>     }
>>>
>>> Why are all the params of DateEncoder 0 or null?
>>>
>>> What is the difference between ScalarEncoder
>>> and RandomDistributedScalarEncoder?
>>>
>>> I happened to use the larger n and w used
>>> by getNetworkDemoFieldEncodingMap. Compared to HotGym demo, durations is
>>> much larger than consumption. So a larger n makes sense, but I should have
>>> set lower w like 6?
>>>
>>> I wasn't able to find information how to set those DATEFIELD parameters.
>>> PATTERN was obvious, but the other two remained unclear. Especially, what
>>> is the Tuple, and those numbers?
>>>
>>> *3. SpatialPooler*
>>>
>>> NetworkAPIDemo uses SpatialPooler in every network. But it should be
>>> related to spatial inputs, correct? So I dropped it from my network
>>> configuration. I have read the JavaDoc, but got no clue. What is it for?
>>>
>>> *4. Multiple Regions and Layers*
>>>
>>> I wasn't able to understand the difference between those 3 modes in
>>> NetworkAPIDemo. I understand MULTILAYER uses multiple layers, and
>>> MULTIREGION uses multiple regions. But when to use which mode in practice?
>>>
>>>
>>> I gave all of these stupid questions, but in overall, I was impressed
>>> that the design is easy to understand to integrate htm.java in my own
>>> application!!
>>>
>>> Thanks,
>>> Takenori
>>>
>>
>>
>>
>> --
>> *With kind regards,*
>>
>> David Ray
>> Java Solutions Architect
>>
>> *Cortical.io <http://cortical.io/>*
>> Sponsor of:  HTM.java <https://github.com/numenta/htm.java>
>>
>> [email protected]
>> http://cortical.io
>>
>
>


-- 
*With kind regards,*

David Ray
Java Solutions Architect

*Cortical.io <http://cortical.io/>*
Sponsor of:  HTM.java <https://github.com/numenta/htm.java>

[email protected]
http://cortical.io

Reply via email to