I've never looked at this closely, but after a closer look it actually seems okay: In the `get_monitoring_data_specs` method a nested CompositeSpace and a nested tuple of sources would be created if you have multiple inputs and outputs. That should be okay, because the training algorithm should flatten the data specs before creating Theano variables and such, before re-nesting them and calling the `get_monitoring_channels` method. So `X` and `Y` can be tuples and CompositeSpaces.