Source code for nengo_dl.config

from nengo import Connection, Ensemble, Network, ensemble
from nengo.builder import Model
from nengo.exceptions import ConfigError, NetworkContextError
from nengo.params import BoolParam, Parameter


[docs]def configure_settings(**kwargs): """ Pass settings to ``nengo_dl`` by setting them as parameters on the top-level Network config. The settings are passed as keyword arguments to ``configure_settings``; e.g., to set ``trainable`` use ``configure_settings(trainable=True)``. Parameters ---------- trainable : bool or None Adds a parameter to Nengo Ensembles/Connections/Networks that controls whether or not they will be optimized by :meth:`.Simulator.train`. Passing ``None`` will use the default ``nengo_dl`` trainable settings, or True/False will override the default for all objects. In either case trainability can be further configured on a per-object basis (e.g. ``net.config[my_ensemble].trainable = True``. See `the documentation <https://www.nengo.ai/nengo-dl/training.html#choosing-which-elements-to-optimize>`_ for more details. planner : graph planning algorithm Pass one of the `graph planners <https://www.nengo.ai/nengo-dl/graph_optimizer.html>`_ to change the default planner. sorter : signal sorting algorithm Pass one of the `sort algorithms <https://www.nengo.ai/nengo-dl/graph_optimizer.html>`_ to change the default sorter. simplifications: list of graph simplification functions Pass a list of `graph simplification functions <https://www.nengo.ai/nengo-dl/graph_optimizer.html>`_ to change the default simplifications applied. session_config: dict Config options passed to ``tf.Session`` initialization (e.g., to change the `GPU memory allocation method <https://www.tensorflow.org/programmers_guide/using_gpu#allowing_gpu_memory_growth>`_ pass ``{"gpu_options.allow_growth": True}``). inference_only : bool Set to True if the network will only be run in inference mode (i.e., no calls to :meth:`.Simulator.train`). This may result in a small increase in the inference speed. lif_smoothing : float If specified, use the smoothed :class:`~.neurons.SoftLIFRate` neuron model, with the given smoothing parameter (``sigma``), to compute the gradient for :class:`~nengo:nengo.LIF` neurons (as opposed to using :class:`~nengo:nengo.LIFRate`). dtype : ``tf.DType`` Set the floating point precision for simulation values. """ # get the toplevel network if len(Network.context) > 0: config = Network.context[0].config else: raise NetworkContextError( "`configure_settings` must be called within a Network context " "(`with nengo.Network(): ...`)") try: params = config[Network] except ConfigError: config.configures(Network) params = config[Network] for attr, val in kwargs.items(): if attr == "trainable": for obj in (Ensemble, Connection, ensemble.Neurons, Network): try: obj_params = config[obj] except ConfigError: config.configures(obj) obj_params = config[obj] obj_params.set_param("trainable", BoolParam("trainable", val, optional=True)) elif attr in ("planner", "sorter", "simplifications", "session_config", "inference_only", "lif_smoothing", "dtype"): params.set_param(attr, Parameter(attr, val)) else: raise ConfigError("%s is not a valid config parameter" % attr)
[docs]def get_setting(model, setting, default=None): """ Returns config settings (created by :func:`.configure_settings`). Parameters ---------- model : :class:`~nengo:nengo.builder.Model` or \ :class:`~nengo:nengo.Network` Built model or Network containing all the config settings. setting : str Name of the config option to return default The default value to return if config option not set Returns ------- Value of ``setting`` if it has been specified, else ``default``. """ if isinstance(model, Model): if model.toplevel is None: return default model = model.toplevel try: return getattr(model.config[model], setting, default) except ConfigError: return default