code: def setup_data():
      
      # The data, shuffled and split between train and test sets
      (x_train, y_train), (x_test, y_test) = mnist.load_data()
  
      if K.image_data_format() == 'channels_first':
          x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
          x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
          input_shape = (1, img_rows, img_cols)
      else:
          x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
          x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
          input_shape = (img_rows, img_cols, 1)
  
      x_train = x_train.astype('float32')
      x_test = x_test.astype('float32')
      x_train /= 255
      x_test /= 255
      print('x_train shape:', x_train.shape)
      print(x_train.shape[0], 'train samples')
      print(x_test.shape[0], 'test samples')
  
      # convert class vectors to binary class matrices
      y_train = keras.utils.to_categorical(y_train, num_classes)
      y_test = keras.utils.to_categorical(y_test, num_classes)
  
      return input_shape, (x_train, y_train), (x_test, y_test)
docs: Load and shape data for training with Keras + Pescador.
  
      Returns
      -------
      input_shape : tuple, len=3
          Shape of each sample; adapts to channel configuration of Keras.
  
      X_train, y_train : np.ndarrays
          Images and labels for training.
  
      X_test, y_test : np.ndarrays
          Images and labels for test.