Thanks, David! I added you as a collaborator.

- Takenori

On Thu, Nov 5, 2015 at 3:25 PM, cogmission (David Ray) <
[email protected]> wrote:

> 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