In Nengo sometimes we represent connection weights in a factored form. For example, suppose you have `N`

neurons in one ensemble and `M`

neurons in the second ensemble. Instead of representing the connection weights between those layers with an `NxM`

weight matrix, we can split it into an `NxD`

and a `DxM`

matrix (where `D`

<< `M`

and `N`

). This is much more efficient in terms of memory usage and communication bandwidth (we only need to communicate a `D`

-dimensional signal between ensembles, rather than `N`

), although you do sacrifice some representational power. Anyway, in those terms the `NxD`

matrix is called the “decoders” and the `DxM`

matrix is called the “encoders”. So you take the output of your first ensemble, multiply it by the decoders, then multiply that again by the encoders, and that is the input to your second ensemble.

Note that in practice we often insert another matrix in the middle, so the full story is that you have a `NxD0`

matrix, a `D0xD1`

matrix, and a `D1xM`

matrix. The `D0xD1`

matrix is the `transform`

parameter on a factored connection (`ensemble->ensemble`

). As opposed to on a `ensemble.neurons->ensemble.neurons`

connection, where the transform represents the full weight matrix.

You may also find this recent forum post helpful, for more discussion on the ideas surrounding this weight factoring New to Nengo & Confused about some concepts.