Skip to content
This repository has been archived by the owner on Sep 1, 2023. It is now read-only.

Signed/Unsigned data type issue with C bindings #3837

Open
mellertson opened this issue May 13, 2018 · 3 comments
Open

Signed/Unsigned data type issue with C bindings #3837

mellertson opened this issue May 13, 2018 · 3 comments

Comments

@mellertson
Copy link
Contributor

mellertson commented May 13, 2018

I posted this issue on the HTM Forum. Matt suggested posting it here, so here it is:

Issue

I’m trying to set globalDecay and maxAge to a value greater than zero in a TMRegion. But I keep getting an AssertionError.

I looked at these docs, and they say that maxSynapsesPerSegment and maxSegmentsPerCell must be set to -1 to disable fixed-sized CLA mode, but setting those two parameters don’t seem to correct the problem.

Does anyone know how to set globalDecay and maxAge to values greater than zero?

Here are the parameters and the call-stack:

tmParams:
    verbosity: 0
    columnCount: 2048
    cellsPerColumn: 32
    inputWidth: 2048
    seed: 1960
    temporalImp: cpp
    newSynapseCount: 20
    initialPerm: 0.21
    permanenceInc: 0.1
    permanenceDec: 0.15
    maxAge: 10
    globalDecay: 0.1
    maxSynapsesPerSegment: -1
    maxSegmentsPerCell: -1
    minThreshold: 12
    activationThreshold: 16
    outputType: normal
    pamLength: 1
    burnIn: 2
    maxInfBacktrack: 20
    maxLrnBacktrack: 10
    permanenceMax: 1.5
Traceback (most recent call last):
  File "./nunetwork.py", line 655, in <module>
    fq_results_filename=FQ_RESULTS_FILENAME)
  File "./nunetwork.py", line 487, in run_the_predictor
    network = createNetwork(dataSource=dataSource, fq_model_filename=fq_model_filename)
  File "./nunetwork.py", line 391, in createNetwork
    network.initialize()
  File "/opt/python_envs/nupic/local/lib/python2.7/site-packages/nupic/engine/__init__.py", line 697, in initialize
    engine_internal.Network.initialize(self, *args, **kwargs)
  File "/opt/python_envs/nupic/local/lib/python2.7/site-packages/nupic/bindings/engine_internal.py", line 1210, in initialize
    return _engine_internal.Network_initialize(self)
  File "/opt/python_envs/nupic/local/lib/python2.7/site-packages/nupic/regions/tm_region.py", line 425, in initialize
    **autoArgs)
  File "/opt/python_envs/nupic/local/lib/python2.7/site-packages/nupic/algorithms/backtracking_tm_cpp.py", line 162, in __init__
    outputType = outputType,
  File "/opt/python_envs/nupic/local/lib/python2.7/site-packages/nupic/algorithms/backtracking_tm.py", line 214, in __init__
    assert (globalDecay == 0.0)
AssertionError

Work Around

I just did some debugging into the nupic library, and discovered in backtracking_tm_cpp.py on line 109, default values for maxSegmentsPerCell and maxSynapsesPerSegment are set to -1.

Additionally, when debugging I see the value of both maxSegmentsPerCell and maxSynapsesPerSegment are 4294967295 which is the maximum value for an unsigned int in C. It seems like there might be a problem with the C bindings converting the values input into the model params file, model.yaml, into an unsigned int, but should be converting it to a signed int.

At any rate, commenting out the following two lines from models.yaml works around the issue:

maxSynapsesPerSegment: -1
maxSegmentsPerCell: -1
@rhyolight
Copy link
Member

@scottpurdy Can you read this issue and tell me what you think before I spend time on it?

@scottpurdy
Copy link
Contributor

@rhyolight yeah looks like that functionality is broken which isn't surprising as no one has used it in a while. Would be nice to fix but make sure you don't change behavior of models not using it.

@mellertson
Copy link
Contributor Author

Out of curiosity, is it something amiss in the C-bindings? I ask so that in the future I know better where to look and hopefully lend more of a hand to fixing things rather than just reporting them.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

3 participants