I discovered that it was actually impossible for SmallNORB.iterator() to ever use the DefaultViewConverter to yield topological batches. Since it's impossible, nobody was doing it, which is why I felt safe making this change. 

Explanation: For iterator()'s data_specs argument, you can either provide a VectorSpace or a Conv2DSpace (DefaultDataSpecs rejects other space types; see dense_design_matrix.py lines 205 and 1204). If you pass it a VectorSpace, no shape conversion happens. If you try to pass it a Conv2DSpace(shape=(2, 96, 96)), this never gets off the ground because Conv2DSpace only accepts 2-D shapes.

This means that nobody is using SmallNORB to yield topological batches via iterator(), so I thought it might be ok to change SmallNORB.view_converter so that they can.

Admittedly, SmallNORB.iterator() isn't the only method that uses SmallNORB.view_converter. SmallNORB.get_topological_view() also does. Replacing the view_converter changes the behavior of this method to return a tuple of two 96x96x1 tensors, rather than one 2x96x96x1 tensor. Since iterator() is used in the training pipeline and get_topological_view(), AFAIK, is not, I chose to give iterator() the ability to yield topo batches rather than preserve the functionality of get_topological_view().

I could override get_topological_view() to look like:
    def get_topological_view(single_tensor=True):
      result = ... # a tuple of two 96x96x1 tensors
      if single_tensor:
        warning("single tensor view for backwards compatibility. Will be deprecated in August 2014")
        result = join(result)  # turns it into a single 2x96x96x1 tensor
      return result