Visual input from an LGN model#

This optional feature generates spikes from a lateral geniculate nucleus (LGN) model in response to visual stimuli. It is relevant to visual networks, not a prerequisite for ordinary DPointNet simulation or training.

You need an LGN input population with its SONATA node/type files and filter parameters, its edges into the recurrent network, and the matching component files. Naming an arbitrary virtual population lgn does not supply those models. examples/dpointnet_v1 shows the visual-network setup; the small all-to-all example does not contain LGN assets.

Configure a drifting grating#

Merge this JSON fragment into a complete simulation config whose network already defines the LGN population:

{
  "run": {
    "default_seed": 3000
  },
  "inputs": {
    "lgn_evoked": {
      "node_set": "lgn",
      "input": "spikes",
      "module": "lgn_tf",
      "use_device_generation": true,
      "stimulus_type": "drifting_gratings",
      "stimulus_options": {
        "row_size": 80,
        "col_size": 120,
        "temporal_f": 2.0,
        "seed": 42
      }
    }
  }
}

row_size and col_size are the stimulus image dimensions. temporal_f is in Hz. Other stimulus options control orientation, spatial frequency, phase, contrast and pre/post delays; keep those experimental choices explicit when comparing runs. Include "lgn_evoked" in the selected inference.inputs or training.parameters[i].inputs list.

Device generation is the default for drifting gratings. It requires a stimulus seed or run.default_seed and a local, single-worker TensorFlow strategy. The high-level RNN uses local MirroredStrategy; programmatic input iterators also accept a local OneDeviceStrategy. It is not a multi-worker pipeline.

Set use_device_generation=false explicitly for unseeded host generation, unsupported strategies or host firing-rate output. Unsupported device requests raise instead of changing your input protocol. Gray-screen stimuli use the host route by default.

Seeds and batches#

Each local replica generates the same seeded trial batch on its device. This preserves DPointNet’s existing broadcast assignment: replicating the batch does not create new independent trials. It is not sharding, where replicas receive different parts of a global batch.

If a stimulus seed is absent, a configured run seed supplies the generator seed. Preserve both the seed policy and trial assignment when reproducing an experiment. This visual-input generator retains its Bernoulli-from-rate spike sampling; it does not replace the separate Poisson background generator.

Initial-state warmup uses the host-reference iterator even when training or inference uses device generation. That is an intentional placement difference, not a new initial-state or sampling policy.

Performance and troubleshooting#

The iterator prefetches one batch and generates inputs on the consuming devices. Fetching must remain eager: do not put next_spikes() inside a tf.function that might capture a stale batch. Close a manually managed iterator when finished; rnn.cleanup() closes configured inference inputs.

Seeded host/device comparisons have been checked on a single RTX3090. Multiple logical replicas are not physical multi-GPU performance validation. Measure end-to-end input and update time before expecting a speedup. For older GPUs, see Pascal GPU compatibility; for initial-state generation interruptions, see Troubleshoot initial-state input generation.