1__author__ = 'Tom Schaul, tom@idsia.ch'
2
3from pybrain.structure.connections.connection import Connection
4from pybrain.structure.parametercontainer import ParameterContainer
5from scipy import average
6
7#:TODO: backward pass
8
9class SubsamplingConnection(Connection, ParameterContainer):
10    """Connection that just averages all the inputs before forwarding."""
11
12    def __init__(self, inmod, outmod, name=None,
13                 inSliceFrom=0, inSliceTo=None, outSliceFrom=0, outSliceTo=None):
14        if outSliceTo is None:
15            outSliceTo = outmod.indim
16        size = outSliceTo - outSliceFrom
17        Connection.__init__(self, inmod, outmod, name,
18                            inSliceFrom, inSliceTo, outSliceFrom, outSliceTo)
19        ParameterContainer.__init__(self, size)
20
21    def _forwardImplementation(self, inbuf, outbuf):
22        outbuf += average(inbuf) * self.params
23
24    def _backwardImplementation(self, outerr, inerr, inbuf):
25        raise NotImplementedError()
26
27