Skip to content

Saving and loading a network#

For the complete APIs, see IO in the library reference.

Global parameters#

The global parameters of the network (flagged with population or projection in the Neuron/Synapse definitions) can be saved to and loaded from a JSON file using the functions save_parameters() and load_parameters():

save_parameters('network.json')
load_parameters('network.json')

The saved JSON file for a network of two populations of Izhikevich neurons connected with STDP will look like:

{
    "populations": {
        "pop0": {
            "a": 0.1,
            "b": 0.2,
            "c": -65.0,
            "d": 8.0,
            "tau_ampa": 5.0,
            "tau_nmda": 150.0,
            "v_rev": 0.0,
            "v_thresh": 30.0
        },
        "pop1": {
            "a": 0.02,
            "b": 0.2,
            "c": -65.0,
            "d": 8.0,
            "tau_ampa": 5.0,
            "tau_nmda": 150.0,
            "v_rev": 0.0,
            "v_thresh": 30.0
        }
    },
    "projections": {
        "proj0": {
            "tau_plus": 20.0,
            "tau_minus": 60.0,
            "A_plus": 0.0002,
            "A_minus": 6.6e-05,
            "w_max": 0.03
        }
    },
    "network": {},
}

By default, populations and projections have names like pop0 and proj1. For readability, we advise setting explicit (and unique) names in their constructor:

pop = Population(100, Izhikevich, name="PFC_exc")
proj = Projection(pop, pop2, 'exc', STDP, name="PFC_exc_to_inh")

Only global parameters can be saved (no array is allowed in the JSON file). By default, only global parameters will be loaded, except if the global_only argument to load_parameters() is set to False. In that case, even local parameters can be set by the JSON file, but they will all use the same values.

If you want to initialize other things than population/projection global parameters, you can define arbitrary values in the "network" dictionary:

{
    "network": {
        "pop1_r_min": 0.1,
        "pop1_r_max": 1.3,
    },
}

load_parameters() will return the corresponding dictionary:

params = load_parameters('network.json')

You can then use them to initialize programmatically non-global parameters or variables:

pop1.r = Uniform(params['pop1_r_min'], params['pop1_r_max'])

Complete state of the network#

The state of all variables, including the synaptic weights, can be saved in a text file, compressed binary file or Matlab file using the save() method:

save('data.txt')
save('data.txt.gz')
save('data.mat')

Filenames ending with .mat correspond to Matlab files (it requires the installation of Scipy), filenames ending with .gz are compressed using gzip (normally standard to all Python distributions, but may require installation), other extensions are normal text files using cPickle (standard).

save() also accepts the populations and projections boolean flags. If True (the default), the neural resp. synaptic variables will be saved. For example, if you only care about synaptic plasticity but not the neural variables, you can set populations to False, and only synaptic variables will be saved.

save('data.txt', populations=False)

Except for the Matlab format, you can also load the state of variables stored in these files once the network is compiled:

load('data.txt')

Warning

The structure of the network must of course be the same as when the file was saved: number of populations, neurons and projections. The neuron and synapse types must define the same variables. If a variable was saved but does not exist anymore, it will be skipped. If the variable did not exist, its current value will be kept, what can lead to crashes.

load() also accepts the populations and projections boolean flags (for example if you want to load only the synaptic weights but not to restore the neural variables).

Populations and projections individually#

Population and Projection objects also have save() and load() methods, allowing to save the corresponding information individually:

pop1.save('pop1.npz')
proj.save('proj.npz')

pop1.load('pop1.npz')
proj.load('proj.npz')

The allowed file formats are:

  • .npz: compressed Numpy binary format (np.savez_compressed), preferred.
  • *.gz: gunzipped binary text file.
  • *.mat: Matlab 7.2.
  • *: binary text file.

As before, .mat can only be used for saving, not loading.