code: def get_executor(sym, ctx, data_inputs, initializer=None):
      
      data_shapes = {k: v.shape for k, v in data_inputs.items()}
      arg_names = sym.list_arguments()
      aux_names = sym.list_auxiliary_states()
      param_names = list(set(arg_names) - set(data_inputs.keys()))
      arg_shapes, output_shapes, aux_shapes = sym.infer_shape(**data_shapes)
      arg_name_shape = {k: s for k, s in zip(arg_names, arg_shapes)}
      params = {n: nd.empty(arg_name_shape[n], ctx=ctx) for n in param_names}
      params_grad = {n: nd.empty(arg_name_shape[n], ctx=ctx) for n in param_names}
      aux_states = {k: nd.empty(s, ctx=ctx) for k, s in zip(aux_names, aux_shapes)}
      exe = sym.bind(ctx=ctx, args=dict(params, **data_inputs),
                     args_grad=params_grad,
                     aux_states=aux_states)
      if initializer is not None:
          for k, v in params.items():
              initializer(k, v)
      return exe, params, params_grad, aux_states
docs: Get executor to Stochastic Gradient Langevin Dynamics and/or Bayesian Dark Knowledge