Ejemplo n.º 1
0
def train_model(index, mymodel, model_version):
    model = mymodel
    train_model = model.train
    test_model = theano.function(model.X, model.f(model.X, is_train=True)[0])

    PN_ratio = 1

    ind_list = get_ind_list_zsz()
    train_ind, validation_ind, test_ind = ind_list[index]
    train_size, validation_size, test_size = train_ind.shape[
        0], validation_ind.shape[0], test_ind.shape[0]
    cam_ind = numpy.asarray([0, 1], dtype='int32')

    batch_train_size = 5
    iterations = 200001
    rank_1 = 0
    rank_5 = 0
    for i in range(iterations):
        person_inds = numpy.sort(
            numpy.random.choice(train_ind, batch_train_size, replace=False))
        [positive_pair_a, positive_pair_b, negative_pair_a, negative_pair_b] = \
            setup.generate_ind_pairs(img_num_per_cam_person, person_inds, cam_ind)

        pos_n = positive_pair_a.size
        neg_n = negative_pair_a.size
        neg_n = min(pos_n * PN_ratio, neg_n)
        neg_ind = numpy.sort(
            numpy.random.choice(negative_pair_a.size, neg_n, replace=False))
        pair_ind_a = numpy.hstack((positive_pair_a, negative_pair_a[neg_ind]))
        pair_ind_b = numpy.hstack((positive_pair_b, negative_pair_b[neg_ind]))
        y = numpy.hstack((numpy.zeros(
            (pos_n, ), dtype='int32'), numpy.ones((neg_n, ), dtype='int32')))
        # dangerous! Do not touch any code above after the "for"!

        cost = train_model(img_data[pair_ind_a, :, :, :],
                           img_data[pair_ind_b, :, :, :], y)

        if i % 10 == 0:
            print 'iteration: %d, cost: %f' % (i, cost)

        if i % 500 == 499:
            t_start = time.time()
            v_rank = setup.testing(test_model, img_num_per_cam_person,
                                   img_data, validation_ind, validation_size)
            print(
                'validation set: rank 1: %4.2f,   rank 5: %4.2f,   rank 10: %4.2f'
                % (v_rank[0] / validation_size * 100, v_rank[4] /
                   validation_size * 100, v_rank[9] / validation_size * 100))
            t_end = time.time()
            print "time consumed is " + str(t_end - t_start) + 'secs.'

            t_start = time.time()
            t_rank = setup.testing(test_model, img_num_per_cam_person,
                                   img_data, test_ind, test_size)
            print(
                'test set: rank 1: %4.2f,   rank 5: %4.2f,   rank 10: %4.2f' %
                (t_rank[0] / test_size * 100, t_rank[4] / test_size * 100,
                 t_rank[9] / test_size * 100))
            t_end = time.time()
            print "time consumed is " + str(t_end - t_start) + 'secs.'

            folder_out = './models/' + 'model_' + model_version + '_' + str(
                index)
            if not os.path.isdir(folder_out):
                os.mkdir(folder_out)

            if v_rank[0] / validation_size * 100 > rank_1 or v_rank[
                    4] / validation_size * 100 > rank_5:
                rank_1 = v_rank[0] / validation_size * 100
                rank_5 = v_rank[4] / validation_size * 100
                rank_1_t = t_rank[0] / test_size * 100
                rank_5_t = t_rank[4] / test_size * 100
                model.save(folder_out + '/v_' + str(int(rank_1)) + '_' + str(int(rank_5)) \
                           + '_t_' + str(int(rank_1_t)) + '_' + str(int(rank_5_t)) + '.mdl')
Ejemplo n.º 2
0
    [positive_pair_a, positive_pair_b, negative_pair_a, negative_pair_b] = \
        setup.generate_ind_pairs(img_num_per_cam_person, person_inds, cam_ind)

    pos_n = positive_pair_a.size
    neg_n = negative_pair_a.size
    neg_n = min(pos_n * PN_ratio, neg_n)
    neg_ind = numpy.sort(numpy.random.choice(negative_pair_a.size, neg_n, replace=False))
    pair_ind_a = numpy.hstack((positive_pair_a, negative_pair_a[neg_ind]))
    pair_ind_b = numpy.hstack((positive_pair_b, negative_pair_b[neg_ind]))
    y = numpy.hstack((numpy.zeros((pos_n,), dtype='int32'), numpy.ones((neg_n,), dtype='int32')))
    ############ NO TOUCH ################

    cost = train_model(img_data[pair_ind_a, :, :, :], img_data[pair_ind_b, :, :, :], y)
    if i % 10 == 0:
        print 'iteration: %d, cost: %f' % (i, cost)

    if i % 1000 == 999:
        ## validation and testing
        t_rank = setup.testing(test_model, img_num_per_cam_person, img_data, test_ind, test_size)
        print('test set: rank 1: %4.2f,   rank 5: %4.2f,   rank 10: %4.2f' %
              (t_rank[0]/test_size * 100, t_rank[4]/test_size * 100, t_rank[9]/test_size * 100))
        v_rank = setup.testing(test_model, img_num_per_cam_person, img_data, validation_ind, validation_size)
        print('validation set: rank 1: %4.2f,   rank 5: %4.2f,   rank 10: %4.2f' %
              (v_rank[0]/validation_size * 100, v_rank[4]/validation_size * 100, v_rank[9]/validation_size * 100))

        ## save model
        model.save_model(i)
        rank_mat = 'rank_iter_%i' % i + '.mat'
        scipy.io.savemat(rank_mat, {'v_rank': v_rank, 't_rank': t_rank})

Ejemplo n.º 3
0
def train_model(index, mymodel, model_version):
    model = mymodel 
    train_model = model.train
    test_model = theano.function(model.X, model.f(model.X, is_train = True)[0])
    
    PN_ratio = 1

    ind_list = get_ind_list_zsz()
    train_ind, validation_ind, test_ind = ind_list[index] 
    train_size, validation_size ,test_size = train_ind.shape[0], validation_ind.shape[0], test_ind.shape[0]
    cam_ind = numpy.asarray([0, 1], dtype='int32')
    
    batch_train_size = 5 
    iterations = 200001
    rank_1 = 0
    rank_5 = 0
    for i in range(iterations):
        person_inds = numpy.sort(numpy.random.choice(train_ind, batch_train_size, replace=False))
        [positive_pair_a, positive_pair_b, negative_pair_a, negative_pair_b] = \
            setup.generate_ind_pairs(img_num_per_cam_person, person_inds, cam_ind)
    
        pos_n = positive_pair_a.size
        neg_n = negative_pair_a.size
        neg_n = min(pos_n * PN_ratio, neg_n)
        neg_ind = numpy.sort(numpy.random.choice(negative_pair_a.size, neg_n, replace=False))
        pair_ind_a = numpy.hstack((positive_pair_a, negative_pair_a[neg_ind]))
        pair_ind_b = numpy.hstack((positive_pair_b, negative_pair_b[neg_ind]))
        y = numpy.hstack((numpy.zeros((pos_n,), dtype='int32'), numpy.ones((neg_n,), dtype='int32')))
        # dangerous! Do not touch any code above after the "for"!
    
        cost = train_model(img_data[pair_ind_a, :, :, :], img_data[pair_ind_b, :, :, :], y)
    
        if i % 10 == 0:
            print 'iteration: %d, cost: %f' % (i, cost)
    
        if i % 500 == 499:
            t_start = time.time()
            v_rank = setup.testing(test_model, img_num_per_cam_person, img_data, validation_ind, validation_size)
            print('validation set: rank 1: %4.2f,   rank 5: %4.2f,   rank 10: %4.2f' %
                  (v_rank[0]/validation_size * 100, v_rank[4]/validation_size * 100, v_rank[9]/validation_size * 100))
            t_end = time.time()
            print "time consumed is " + str(t_end - t_start) + 'secs.'
    
            t_start = time.time()
            t_rank = setup.testing(test_model, img_num_per_cam_person, img_data, test_ind, test_size)
            print('test set: rank 1: %4.2f,   rank 5: %4.2f,   rank 10: %4.2f' %
                  (t_rank[0]/test_size * 100, t_rank[4]/test_size * 100, t_rank[9]/test_size * 100))
            t_end = time.time()
            print "time consumed is " + str(t_end - t_start) + 'secs.'
    
            folder_out = './models/' + 'model_' + model_version + '_' + str(index)
            if not os.path.isdir(folder_out):
                os.mkdir(folder_out)
    
            if v_rank[0]/validation_size *100 > rank_1 or v_rank[4]/validation_size *100 > rank_5:
               rank_1 = v_rank[0]/validation_size *100 
               rank_5 = v_rank[4]/validation_size *100
               rank_1_t = t_rank[0]/test_size*100
               rank_5_t = t_rank[4]/test_size*100
               model.save(folder_out + '/v_' + str(int(rank_1)) + '_' + str(int(rank_5)) \
                          + '_t_' + str(int(rank_1_t)) + '_' + str(int(rank_5_t)) + '.mdl')
Ejemplo n.º 4
0
epochs = results.epochs
lr = results.learning_rate
gpu = results.boolean_t
print_every = 30

if gpu==True:
    using_gpu = torch.cuda.is_available()
    device = 'gpu'
    print('GPU On');
else:
    print('GPU Off');
    device = 'cpu'
    
    
# Loading Dataset
image_trainloader, image_testloader, image_valloader, image_trainset  = setup.loading_data(data_dir)
class_to_idx = image_trainset.class_to_idx

# Network Setup
model, input_size = setup.make_model(arch, hidden_units, lr)
criterion = nn.NLLLoss()
optimizer = optim.Adam(model.classifier.parameters(), lr=lr)

# Training Model
setup.my_DLM(model, image_trainloader, image_valloader, epochs, print_every, criterion, optimizer, device)

# Testing Model
setup.testing(model, image_testloader)

# Saving Checkpoint
setup.save_checkpoints(model, arch, lr, epochs, input_size, hidden_units, class_to_idx, checkpoint_path)
Ejemplo n.º 5
0
    neg_ind = numpy.sort(
        numpy.random.choice(negative_pair_a.size, neg_n, replace=False))
    pair_ind_a = numpy.hstack((positive_pair_a, negative_pair_a[neg_ind]))
    pair_ind_b = numpy.hstack((positive_pair_b, negative_pair_b[neg_ind]))
    y = numpy.hstack((numpy.zeros(
        (pos_n, ), dtype='int32'), numpy.ones((neg_n, ), dtype='int32')))
    ############ NO TOUCH ################

    cost = train_model(img_data[pair_ind_a, :, :, :],
                       img_data[pair_ind_b, :, :, :], y)
    if i % 10 == 0:
        print 'iteration: %d, cost: %f' % (i, cost)

    if i % 1000 == 999:
        ## validation and testing
        t_rank = setup.testing(test_model, img_num_per_cam_person, img_data,
                               test_ind, test_size)
        print('test set: rank 1: %4.2f,   rank 5: %4.2f,   rank 10: %4.2f' %
              (t_rank[0] / test_size * 100, t_rank[4] / test_size * 100,
               t_rank[9] / test_size * 100))
        v_rank = setup.testing(test_model, img_num_per_cam_person, img_data,
                               validation_ind, validation_size)
        print(
            'validation set: rank 1: %4.2f,   rank 5: %4.2f,   rank 10: %4.2f'
            % (v_rank[0] / validation_size * 100, v_rank[4] / validation_size *
               100, v_rank[9] / validation_size * 100))

        ## save model
        model.save_model(i)
        rank_mat = 'rank_iter_%i' % i + '.mat'
        scipy.io.savemat(rank_mat, {'v_rank': v_rank, 't_rank': t_rank})