brainpy.nn.operations.ff_connect
brainpy.nn.operations.ff_connect#
- brainpy.nn.operations.ff_connect(senders, receivers, inplace=False, name=None, need_detect_cycle=True)[source]#
Connect two sequences of
Node
instances to form abrainpy.nn.base.Network
instance. senders output will be used as input for receivers in the created network. This is similar to a function composition operation:\[network(x) = (sender \circ receiver)(x) = receiver(sender(x))\]You can also perform this operation using the
>>
operator:network = sender >> receiver
Or using this function:
network = ff_connect(sender, receiver)
sender and receiver can also be
brainpy.nn.base.Network
instances. In this case, the newbrainpy.nn.base.Network
created will contain all nodes previously contained in all the networks, and link all node1 outputs to all node2 inputs. This allows to chain the>>
operator:step1 = node0 >> node1 # this is a network step2 = step1 >> node2 # this is another
node1 can finally be lists or tuples of nodes. In this case, all node1 outputs will be linked to a
Concat
node to concatenate them, and theConcat
node will be linked to all node2 inputs:# many-concat-to-one network = [node1, node2, ..., node] >> node_out
If you do not want to concatenate all input nodes, you can use set to wrap all input nodes at once. Then, node2 will receive multiple inputs defined in node1:
# many-to-one network = {node1, node2, ..., node_N} >> node_out
In the case of “one-to-many” feedforward connection, node2 only support a set of node. Using list or tuple to wrap multiple receivers will concatenate all nodes in the receiver end. This will cause errors:
# wrong operation of one-to-many network = node_in >> {node1, node2, ..., node_N} # correct operation of one-to-many network = node_in >> {node1, node2, ..., node_N}
“many-to-many” connection is also allowed.
You can still use the
>>
operator in this situation, except for many-to-many nodes connections:# many-to-many {node1, node2, ..., node} >> {node1, node2, ..., node}
- Parameters
senders (Node, sequence of Node) – Nodes or sequence of nodes to connect feedforward connections.
receivers (Node, sequence of Node) – Nodes or sequence of nodes to connect feedforward connections.
inplace (bool) – Whether inplace update the node.
name (str, optional) – Name for the chaining Network.
need_detect_cycle (bool) – Whether we need to detect cycles exit in the final network.
- Returns
A
brainpy.nn.base.Network
instance chaining the nodes.- Return type
Notes
Be careful to how you link the different nodes: reservoirpy does not allow to have circular dependencies between them:
network = node1 >> node2 # fine network = node1 >> node2 >> node1 # raises! data would flow in # circles forever...