Skip to content

Submodel machinery and improvements

J.L Stevens edited this page Jul 25, 2014 · 21 revisions

Lancet integration

  • With the new system, Lancet can checking model parameters cheaply (not hooked up yet)

Miscellaneous fixes

  • Auto-generation of projection names...

  • Warn if matchcondition defined (and not None) and no projections were created (for that condition)

  • Tobias made the following comment in issue #573 :

    The current implementation does not work with SheetSpec properties which have non-string values, as name+=prop fails (name is a string). This is currently the case for spatial frequency sheets.

    There are two ways to fix this:

    1. Properties must always have string values, which would need to be documented. The drawback with this fix is that things like channel=properties['SF'] if 'SF' in properties else 1 would become more slightly more complicated, i.e. channel=int(properties['SF'][2:]) if 'SF' in properties else 1. However, it would have the advantage that we could stick to the current naming convention.
    2. The simplest solution would be changing name+=prop to name+=str(prop). However, then SF sheets would be called LGNOn1, LGNOn2 and so forth. As long as there is only SF, this is fine. However additional "integer-"properties would make it harder to distinguish which sheet is meant, at least from the sheet name. Internally, everything would be still nice because the properties can always be accessed.

Is this issue resolved now?

Component based approach

Some of the issues around implementing a component based approach are discussed in [issue 573](https://github.com/ioam/topographica/issues/573).

A component based approach will be tricky to get working due to all the communication required between components. Specifically, there is information that needs to be propagated locally between components (e.g an LGN component would need to know about the set of available retinas) as well as information that needs to be computed globally once the model definition is complete, namely computing appropriate bounds for components given a target area for a specific sheet (e.g. a cortical sheet of interest).

What we think will be required

  • A 'connect' operator >> and a 'union' operator &. We believe that together we could use these operators to specify both feed-forward and recurrent projections.

  • Some way of addressing groups of sheets to be connected between components.E.g. something like:

    v1.efferent >> lgn.modulate
  • A sheet may be a member of one or more 'sheet groups' (or none at all). These groups would then act as 'src' and 'dest' in a call to topo.sim.connect. There would be a method to specify the projection parameters for connections to a particular group.

  • Two (or more!) 'passes' to propagate information between components:
    1. A forwards pass so that (for example) the retina can tell the LGN how it has been configured (e.g how many generator sheets are present). This would happen with the suggested '>>'operator.
    2. A backwards pass to propagate bounds from the final cortical area to the earlier sheets. This has to wait for the whole model to be defined. Right now the lack of a well-defined mechanism to

propagate bounds properly between components is a big reason everything is so entangled.

  • We would need to untangle attributes that have been used across levels/components. For instance, sf_spacing and sf_channels are currently used everywhere but each component should be asking the previous component 1) how many spatial frequency channels are there 2) the relative spatial multiplier between them. Currently, these are all defined once, at the start of the class hierarchy in VisualInputModel.

The distant future

  • Functionality to inspect the structure of SheetSpec and ProjectionSpec objects to check the network has one fully connected component.
  • Render a Model instance as a model diagram (functionality currently only offered by the Model Editor)