code: def calc_grad(exe, exe_grads, params, X, Y, label_name=None, outgrad_f=None):
      
      exe.copy_params_from(params)
      exe.arg_dict['data'][:] = X
      if outgrad_f is None:
          exe.arg_dict[label_name][:] = Y
          exe.forward(is_train=True)
          exe.backward()
      else:
          exe.forward(is_train=True)
          exe.backward(outgrad_f(exe.outpus, Y))
      for k, v in exe_grads.items():
          v.wait_to_read()
docs: Calculate gradient