code: def create_reader(path, is_training, input_dim, label_dim):
      return MinibatchSource(
          CTFDeserializer(
              path,
              StreamDefs(
                  features=StreamDef(
                      field="features", shape=input_dim, is_sparse=False
                  ),
                  labels=StreamDef(
                      field="labels", shape=label_dim, is_sparse=False
                  ),
              ),
          ),
          randomize=is_training,
          max_sweeps=INFINITELY_REPEAT if is_training else 1,
      )
  
file_path: CNTK/Examples/Image/Classification/MLP/Python/SimpleMNIST.py
imports: import argparse
  import numpy
  import sys
  import os
  import cntk
  from cntk.train import Trainer, minibatch_size_schedule
  from cntk.io import MinibatchSource, CTFDeserializer, StreamDef, StreamDefs, INFINITELY_REPEAT
  from cntk.device import cpu, try_set_default_device
  from cntk.learners import adadelta, learning_parameter_schedule_per_sample
  from cntk.ops import relu, element_times, constant
  from cntk.layers import Dense, Sequential, For
  from cntk.losses import cross_entropy_with_softmax
  from cntk.metrics import classification_error
  from cntk.train.training_session import *
  from cntk.logging import ProgressPrinter, TensorBoardProgressWriter
label_desc: Use image node_id 2 for calling a global function with example usage: create_reader(path, is_training, input_dim, label_dim) and returns: MinibatchSource