def METHOD_NAME(self, dy_model, metric_list, batch, config):
    # x_spt.shape = x_qry.shape = [task_count,batchsize,7+50+7+6]
    # y_spt.shape = y_qry.shape = [task_count,batchsize,1]
    x_spt, y_spt, x_qry, y_qry = self.create_feeds(batch, config)
    task_count = config.get("hyper_parameters.task_count", 5)
    local_lr = config.get("hyper_parameters.local_lr", 0.0002)
    criterion = paddle.nn.BCELoss()
    losses_q = []
    dy_model.clear_gradients()
    for i in range(task_count):
        ##  local update --------------
        fast_parameters = list(dy_model.parameters())
        for weight in fast_parameters:
            weight.fast = None
        support_set_y_pred = dy_model(x_spt[i])
        label = paddle.squeeze(y_spt[i].astype('float32'))
        loss = criterion(support_set_y_pred, label)
        dy_model.clear_gradients()
        loss.backward()
        fast_parameters = list(dy_model.parameters())
        for weight in fast_parameters:
            if weight.grad is None:
                continue
            if weight.fast is None:
                weight.fast = weight - local_lr * weight.grad  # create weight.fast
            else:
                weight.fast = weight.fast - local_lr * weight.grad
        dy_model.clear_gradients()
        ##  local update --------------
        query_set_y_pred = dy_model(x_qry[i])
        label = paddle.squeeze(y_qry[i].astype('float32'))
        loss_q = criterion(query_set_y_pred, label)
        losses_q.append(loss_q)  # Save the loss on the subtask dataset
        pred = paddle.unsqueeze(query_set_y_pred, 1)
        pred = paddle.concat([1 - pred, pred], 1)
        metric_list[0].update(preds=pred.numpy(), labels=label.numpy())
    loss_average = paddle.stack(losses_q).mean(0)
    print_dict = {'loss': loss_average}
    return loss_average, metric_list, print_dict