Skip to main content
Ctrl+K
Logo image

Site Navigation

  • Getting started
  • User Guide
  • API reference
  • Developer guide

Site Navigation

  • Getting started
  • User Guide
  • API reference
  • Developer guide
Ctrl+K

Section Navigation

  • Node API (reservoirpy.Node)
  • Models (reservoirpy.Model)
  • ReservoirPy Nodes (reservoirpy.nodes)
    • reservoirpy.nodes.Reservoir
    • reservoirpy.nodes.NVAR
    • reservoirpy.nodes.IPReservoir
    • reservoirpy.nodes.Ridge
    • reservoirpy.nodes.ScikitLearnNode
    • reservoirpy.nodes.LMS
    • reservoirpy.nodes.RLS
    • reservoirpy.nodes.FORCE
    • reservoirpy.nodes.ESN
    • reservoirpy.nodes.Tanh
    • reservoirpy.nodes.Sigmoid
    • reservoirpy.nodes.Softmax
    • reservoirpy.nodes.Softplus
    • reservoirpy.nodes.ReLU
    • reservoirpy.nodes.Identity
    • reservoirpy.nodes.Input
    • reservoirpy.nodes.Output
    • reservoirpy.nodes.Concat
    • reservoirpy.nodes.Delay
  • Weights initialization (reservoirpy.mat_gen)
    • reservoirpy.mat_gen.random_sparse
    • reservoirpy.mat_gen.uniform
    • reservoirpy.mat_gen.normal
    • reservoirpy.mat_gen.bernoulli
    • reservoirpy.mat_gen.zeros
    • reservoirpy.mat_gen.ones
    • reservoirpy.mat_gen.generate_internal_weights
    • reservoirpy.mat_gen.generate_input_weights
    • reservoirpy.mat_gen.fast_spectral_initialization
    • reservoirpy.mat_gen.Initializer
  • Activations functions (reservoirpy.activationsfunc)
    • reservoirpy.activationsfunc.get_function
    • reservoirpy.activationsfunc.identity
    • reservoirpy.activationsfunc.sigmoid
    • reservoirpy.activationsfunc.tanh
    • reservoirpy.activationsfunc.relu
    • reservoirpy.activationsfunc.softmax
    • reservoirpy.activationsfunc.softplus
  • Metrics and observables (reservoirpy.observables)
    • reservoirpy.observables.spectral_radius
    • reservoirpy.observables.mse
    • reservoirpy.observables.rmse
    • reservoirpy.observables.nrmse
    • reservoirpy.observables.rsquare
    • reservoirpy.observables.memory_capacity
    • reservoirpy.observables.effective_spectral_radius
  • Datasets (reservoirpy.datasets)
    • reservoirpy.datasets.mackey_glass
    • reservoirpy.datasets.lorenz
    • reservoirpy.datasets.multiscroll
    • reservoirpy.datasets.doublescroll
    • reservoirpy.datasets.rabinovich_fabrikant
    • reservoirpy.datasets.lorenz96
    • reservoirpy.datasets.rossler
    • reservoirpy.datasets.kuramoto_sivashinsky
    • reservoirpy.datasets.mso
    • reservoirpy.datasets.mso2
    • reservoirpy.datasets.mso8
    • reservoirpy.datasets.logistic_map
    • reservoirpy.datasets.henon_map
    • reservoirpy.datasets.narma
    • reservoirpy.datasets.japanese_vowels
    • reservoirpy.datasets.santafe_laser
    • reservoirpy.datasets.to_forecasting
    • reservoirpy.datasets.one_hot_encode
    • reservoirpy.datasets.from_aeon_classification
    • reservoirpy.datasets.set_seed
    • reservoirpy.datasets.get_seed
  • Hyperparameter optimization helpers (reservoirpy.hyper)
    • reservoirpy.hyper.research
    • reservoirpy.hyper.plot_hyperopt_report
  • ReservoirPy v0.2 tools (reservoirpy.compat)
    • reservoirpy.compat.load_compat
    • reservoirpy.compat.load
    • reservoirpy.compat.ESN
    • reservoirpy.compat.ESNOnline
    • reservoirpy.compat.regression_models.RidgeRegression
  • Node operations - link, merge (reservoirpy.ops)
    • reservoirpy.ops.link
    • reservoirpy.ops.link_feedback
    • reservoirpy.ops.merge
  • ReservoirPy API reference
  • Node operations - link, merge (reservoirpy.ops)
  • reservoirpy.ops.link_feedback

reservoirpy.ops.link_feedback#

class reservoirpy.ops.link_feedback(node, feedback, inplace=False, name=None)[source]#

Create a feedback connection between the feedback node and node. Feedbacks nodes will be called at runtime using data from the previous call.

This is not an in-place operation by default. This function will copy node and then sets the copy _feedback attribute as a reference to feedback node. If inplace is set to True, then node is not copied and the feedback is directly connected to node. If feedback is a list of nodes or models, then all nodes in the list are first connected to a Concat node to create a model gathering all data from all nodes in a single feedback vector.

You can also perform this operation using the << operator:

node1 = node1 << node2
# with feedback from a Model
node1 = node1 << (fbnode1 >> fbnode2)
# with feedback from a list of nodes or models
node1 = node1 << [fbnode1, fbnode2, ...]

Which means that a feedback connection is now created between node1 and node2. In other words, the forward function of node1 depends on the previous output of node2:

\[\mathrm{node1}(x_t) = \mathrm{node1}(x_t, \mathrm{node2}(x_{t - 1}))\]

You can also use this function to define feedback:

node1 = link_feedback(node1, node2)
# without copy (node1 is the same object throughout)
node1 = link_feedback(node1, node2, inplace=True, name="n1_copy")
Parameters:
  • node (Node) – Node receiving feedback.

  • feedback (_Node) – Node or Model sending feedback

  • inplace (bool, defaults to False) – If True, then the function returns a copy of node.

  • name (str, optional) – Name of the copy of node if inplace is True.

Returns:

A node instance taking feedback from feedback.

Return type:

Node

Raises:

TypeError –

  • If node is a Model. Models can not receive feedback. - If any of the feedback nodes are not _Node instances.

previous

reservoirpy.ops.link

next

reservoirpy.ops.merge

On this page
  • link_feedback
Show Source

© Copyright 2021, Xavier Hinaut, Nathan Trouvain.

Created using Sphinx 7.2.6.

Built with the PyData Sphinx Theme 0.13.3.