Esempio n. 1
0
    print("[*] Training")
    best_avg_acc = 0
    for epoch in range(args.epochs):

        # Train
        tag = ''  # tag = '*' if the model was saved in the last epoch
        train_total_loss = 0
        running_acc_flickr, running_acc_sketches = 0, 0
        for i, (first, second, first_label, second_label,
                similarity) in enumerate(train_loader):
            # first: flickr, second: sketches
            first, second, similarity = first.to(args.device), second.to(
                args.device), similarity.to(args.device)
            first_label, second_label = first_label.to(
                args.device), second_label.to(args.device)
            pred = contrastive_net.forward((first, second, None),
                                           include_negative=False)
            pred_feats_first = pred['feats']['anchor']
            pred_feats_second = pred['feats']['positive']
            pred_logits_first = pred['logits']['anchor']
            pred_logits_second = pred['logits']['positive']

            # region: optimization step
            optimizer.zero_grad()
            loss_contrastive = contrastive_loss(pred_feats_first,
                                                pred_feats_second, similarity)
            loss_classifier_sketches = cross_entropy_loss(
                pred_logits_first, first_label)
            loss_classifier_flickr = cross_entropy_loss(
                pred_logits_second, second_label)
            loss = 0.6 * (0.5 *
                          (loss_classifier_flickr +
Esempio n. 2
0
        config.learning_rate = args.lr

    print("[*] Training")
    best_avg_acc = 0
    for epoch in range(args.epochs):

        # Train
        tag = ''  # tag = '*' if the model was saved in the last epoch
        train_total_loss = 0
        running_acc_anchor, running_acc_positive, running_acc_negative = 0, 0, 0
        for i, (a, p, n, a_l, p_l, n_l) in enumerate(train_loader):
            # first: flickr, second: sketches
            a, p, n = a.to(args.device), p.to(args.device), n.to(args.device)
            a_l, p_l, n_l = a_l.to(args.device), p_l.to(args.device), n_l.to(
                args.device)
            pred = siamese_net.forward((a, p, n), include_negative=True)

            pred_feats_anchor = pred['feats']['anchor']
            pred_feats_positive = pred['feats']['positive']
            pred_feats_negative = pred['feats']['negative']

            pred_logits_anchor = pred['logits']['anchor']
            pred_logits_positive = pred['logits']['positive']
            pred_logits_negative = pred['logits']['negative']

            # region: optimization step
            optimizer.zero_grad()
            loss_triplet = triplet_loss(pred_feats_anchor, pred_feats_positive,
                                        pred_feats_negative)
            loss_classifier_anchor = cross_entropy_loss(
                pred_logits_anchor, a_l)