def prepareInputsForGPU(image, full_mask, gaa_mean, gaa_std):
    """
    This packs a series of operations that transfer input to GPU and then format and normalizes it.
    Inputs:
        image, full_mask = MR images and their masks
        gaa_mean, gaa_std = input statistics
    
    Outputs:
        image and target for neural network on GPU
    
    """

    # transfer input to GPU
    gImage = fast_transfer(image)
    gImage = gpuDecompress(gImage)

    gMask = fast_transfer(full_mask, isImage=False)
    gMask = gpuDecompressMask(gMask, 88, 576, 576)
    image1, target = gpuNormalise(gImage, gMask, gaa_mean, gaa_std)

    return image1, target
    output_dir = r'C:\Users\wfok007\femuring\imaging\AtriaSeg_2018_training\transformation\ResNet'
    debug_dir = r'C:\Users\wfok007\femuring\imaging\AtriaSeg_2018_training\debug'
    hpc = r'Z:\mpi_heart'
    weight_dir = 'Z:\mpi_heart\weight_checkpoints'

    mean, std = load_stat()

    num_ranks = 125
    num_ranks_train = 375
    od, oh, ow = 88, 112, 112
    multiple = 0.25
    model = createModel(od, oh, ow, multiple)

    # put the statistics on the GPU
    aa_mean, aa_std = addAxis(mean, std)
    gaa_mean, gaa_std = fast_transfer(aa_mean), fast_transfer(aa_std)

    # initialize the data for validation and training
    generator_valid = metaGen('valid', num_ranks, hpc)
    generator_train = metaGen('train', num_ranks_train, hpc)

    criterion = Dice_Loss()
    accuracy = non_differentiable_Dice_coef()

    learning_rate = math.pow(10, -1.5)
    T = 50
    lookup, storedKeys, lrs = createCyclical(T,
                                             learning_rate,
                                             'highLow',
                                             min_fraction=1 / 10)