'Reconstruct from the model.
Args:
layername: Name of the layer which is to be reconstructed.
numbatches: Number of batches to reconstruct.
inputlayername: List of input layers whose states will be returned.
validation: If True, reconstruct the validation set,
else reconstruct test set.
Returns:
The reconstruction for layer \'layername\' and inputs in layers
\'inputlayername\''

def Reconstruct(self, layername, numbatches, inputlayername=[], validation=True):

    step = 0
    self.recon = []
    self.inputs = []
    self.recon_pos = 0
    inputlayer = []
    layer_to_tap = self.GetLayerByName(layername, down=True)
    self.recon = np.zeros(((numbatches * self.e_op.batchsize), layer_to_tap.state.shape[0]))
    for (i, lname) in enumerate(inputlayername):
        l = self.GetLayerByName(lname)
        inputlayer.append(l)
        self.inputs.append(np.zeros(((numbatches * self.e_op.batchsize), l.state.shape[0])))
    if validation:
        datagetter = self.GetValidationBatch
    else:
        datagetter = self.GetTestBatch
    for batch in range(numbatches):
        datagetter()
        self.ReconstructOneBatch(layer_to_tap, inputlayer)
    return (self.recon, self.inputs)
