예제 #1
0
def shallow(inputs, name, units, verbose=1):
    with tf.variable_scope(name):
        hidden = tf.layers.dense(inputs,
                                 units,
                                 activation=tf.nn.relu,
                                 name='hidden')
        outputs = tf.layers.dense(hidden, 1, name='outputs')

    if verbose: summary(name)
    return outputs
예제 #2
0
def activeUnsL(model, node,  label, features, adj_lists, num_features, num_hidden, num_cls, filetime,labels, xi=1e-6, eps=2.5, num_iters=10):
    #obtain the adj matrix and find the best perturbation direction then add perturbation to the attention matrix
    
    encSpc = model(node, actE = True)
    
    dec_ae = DEC_AE(50, 100, num_hidden)
    dec = DEC(num_cls, 50, dec_ae)
    kmeans = KMeans(n_clusters=dec.cluster_number, n_init=20)
    features = []
    # form initial cluster centres
    dec.pretrain(encSpc.data)
    features = dec.ae.encoder(encSpc).detach()
    predicted = kmeans.fit_predict(features)
    predicted_previous = torch.tensor(np.copy(predicted), dtype=torch.long)
    _, accuracy, _, _ = cluster_accuracy( label, predicted)
    print("ACCU", accuracy)
    cluster_centers = torch.tensor(kmeans.cluster_centers_, dtype=torch.float)
    #print(features)
    dec.assignment.cluster_centers = torch.nn.Parameter(cluster_centers)
    loss_function = nn.KLDivLoss(size_average=False)
    delta_label = None
    optimizer = torch.optim.SGD(dec.parameters(), lr = 0.01, momentum=0.9)
    for epoch in range(250):
        dec.train()
        output = dec(encSpc)
        target = target_distribution(output).detach()
        loss = loss_function(output.log(), target) / output.shape[0]
        
        optimizer.zero_grad()
        loss.backward(retain_graph=True)
        optimizer.step(closure=None)
        features = dec.ae.encoder(encSpc).detach()
        #predicted =  dec(test)
        predicted = output.argmax(dim = 1)
        delta_label = float((predicted != predicted_previous ).float().sum().item()) / predicted_previous.shape[0]

        predicted_previous = predicted
        _, accuracy, _, _ = cluster_accuracy(np.array(predicted), np.array(label))
        
        if epoch % 50 == 49: 
            count_matrix = np.zeros((num_cls, num_cls), dtype=np.int64)
            for i in range(len(predicted)):
                count_matrix[np.array(predicted)[i], np.array(label)[i]] += 1
            for i in range(num_cls):
                print(count_matrix[i])
            summary(node, labels, np.array(predicted), num_cls, filetime, outlog = False, output=None)
        
            print(loss)
            print("ACCU", accuracy)
예제 #3
0
    def rand_crop(image,size):
        
    real32 = tf.map_fn(lambda image: tf.random_crop(image,size = [32, 32, 3]), real)
    fake32 = tf.map_fn(lambda image: tf.random_crop(image,size = [32, 32, 3]), fake)
    r_logit32 = discriminator32(real32, reuse=False)
    f_logit32 = discriminator32(fake32)

    # losses
    def gradient_penalty(real, fake, f):
        def interpolate(a, b):
            shape = tf.concat((tf.shape(a)[0:1], tf.tile([1], [a.shape.ndims - 1])), axis=0)
            alpha = tf.random_uniform(shape=shape, minval=0., maxval=1.)
            inter = a + alpha * (b - a)
            inter.set_shape(a.get_shape().as_list())
            return inter

        x = interpolate(real, fake)
        pred = f(x)
        gradients = tf.gradients(pred, x)[0]
        slopes = tf.sqrt(tf.reduce_sum(tf.square(gradients), reduction_indices=list(range(1, x.shape.ndims))))
        gp = tf.reduce_mean((slopes - 1.)**2)
        return gp

    wd = tf.reduce_mean(r_logit) - tf.reduce_mean(f_logit)
    gp = gradient_penalty(real, fake, discriminator)
    d_loss = -wd  + gp * 10.0
    g_loss = -tf.reduce_mean(f_logit)

    wd32 = tf.reduce_mean(r_logit32) - tf.reduce_mean(f_logit32)
    gp32 = gradient_penalty(real32, fake32, discriminator32)
    d_loss32 = -wd32  + gp32 * 10.0
    g_loss += -tf.reduce_mean(f_logit32)

    # otpims
    d_var = utils.trainable_variables('discriminator')
    d32_var = utils.trainable_variables('discriminator32')
    g_var = utils.trainable_variables('generator')
    d_step = tf.train.AdamOptimizer(learning_rate=lr, beta1=0.5).minimize(d_loss, var_list=d_var)
    d32_step = tf.train.AdamOptimizer(learning_rate=lr, beta1=0.5).minimize(d_loss, var_list=d32_var)
    g_step = tf.train.AdamOptimizer(learning_rate=lr, beta1=0.5).minimize(g_loss, var_list=g_var)

    # summaries
    d_summary = utils.summary({wd: 'wd', gp: 'gp'})
    d32_summary = utils.summary({wd32: 'wd32', gp32: 'gp32'})
    g_summary = utils.summary({g_loss: 'g_loss'})

    # sample
    f_sample = generator(z, training=False)
예제 #4
0
def load_model(state, default_model_names, customized_models_names, use_cuda):
    if state['arch'] in default_model_names:
        if state['pretrained']:
            print("=> using pre-trained model '{}'".format(state['arch']))
            model = models.__dict__[state['arch']](pretrained=True)
            # resnet和densenet的最后一层名字不同
            if 'resnet' in state['arch']:
                num_ftrs = model.fc.in_features
                model.fc = nn.Linear(num_ftrs, state['num_classes'])
            elif 'densenet' in state['arch']:
                num_ftrs = model.classifier.in_features
                model.classifier = nn.Linear(num_ftrs, state['num_classes'])
        else:
            print("=> creating model '{}'".format(state['arch']))
            model = models.__dict__[state['arch']](
                num_classes=state['num_classes'])
    elif state['arch'].startswith('resnext') or state['arch'].startswith(
            'se_resnext'):
        print("=> creating model '{}'".format(state['arch']))
        model = customized_models.__dict__[state['arch']](
            baseWidth=state['base_width'],
            cardinality=state['cardinality'],
            num_class=state['num_classes'])
    else:
        raise 'model {} is not supported! Please choose model form {}'.format(
            state['arch'], default_model_names + customized_models_names)

    if use_cuda:
        if state['arch'].startswith('alexnet') or state['arch'].startswith(
                'vgg'):
            model.features = torch.nn.DataParallel(model.features)
            model.cuda()
        else:
            model = torch.nn.DataParallel(model).cuda()

    # 输出网络信息
    fout = open(os.path.join(state['checkpoint'], 'out.txt'), 'w')
    summary(model, (3, state['image_size'], state['image_size']),
            print_fn=lambda x: fout.write(x + '\n'))
    num_params = 'Total params: %.2fM' % (sum(p.numel()
                                              for p in model.parameters()) /
                                          1000000.0)
    print(num_params)
    fout.write(num_params + '\n')
    fout.flush()
    fout.close()
    return model
예제 #5
0
def cnn(inputs, name, units, verbose=1):
    with tf.variable_scope(name):
        inputs = tf.reshape(inputs, (-1, 28, 28, 1), name='inputs')
        conv1 = tf.layers.conv2d(inputs,
                                 units, (3, 3),
                                 padding='same',
                                 activation=tf.nn.relu,
                                 name='conv1')
        conv2 = tf.layers.conv2d(conv1,
                                 units, (3, 3),
                                 padding='same',
                                 activation=tf.nn.relu,
                                 name='conv2')
        flatten = tf.reshape(conv2, (-1, np.prod(conv2.shape.as_list()[1:])),
                             name='flatten')
        outputs = tf.layers.dense(flatten, 10, name='outputs')

    if verbose: summary(name)
    return outputs
예제 #6
0
def main(args, **model_kwargs):
    device = torch.device(args.device)
    args.device = device
    if args.dataset == 'abilene_tm':
        args.nNodes = 12
        args.day_size = 288
    elif args.dataset == 'geant_tm':
        args.nNodes = 22
        args.day_size = 96
    elif args.dataset == 'brain_tm':
        args.nNodes = 9
    elif 'sinet' in args.dataset:
        args.nNodes = 73
        args.day_size = 288
    else:
        raise ValueError('Dataset not found!')

    test_loader = utils.get_dataloader(args)

    args.test_size, args.nSeries = test_loader.dataset.gt_data_set.shape

    in_dim = 1
    args.in_dim = in_dim

    model = models.get_model(args)
    logger = utils.Logger(args)

    engine = utils.Trainer.from_args(model, test_loader.dataset.scaler, args)

    utils.print_args(args)

    if not args.test:
        test_met_df, x_gt, y_gt, y_real, yhat = engine.test(
            test_loader, engine.model, args.out_seq_len)
        test_met_df.round(6).to_csv(
            os.path.join(logger.log_dir, 'test_metrics.csv'))
        print('Prediction Accuracy:')
        print(utils.summary(logger.log_dir))
        np.save(os.path.join(logger.log_dir, 'x_gt'), x_gt)
        np.save(os.path.join(logger.log_dir, 'y_gt'), y_gt)
        np.save(os.path.join(logger.log_dir, 'y_real'), y_real)
        np.save(os.path.join(logger.log_dir, 'yhat'), yhat)

    else:
        x_gt = np.load(os.path.join(logger.log_dir, 'x_gt.npy'))
        y_gt = np.load(os.path.join(logger.log_dir, 'y_gt.npy'))
        y_real = np.load(os.path.join(logger.log_dir, 'y_real.npy'))
        yhat = np.load(os.path.join(logger.log_dir, 'yhat.npy'))

    if args.plot:
        logger.plot(x_gt, y_real, yhat)

    # run TE
    if args.run_te:
        run_te(x_gt, y_gt, yhat, args)
예제 #7
0
파일: main.py 프로젝트: jihun-hong/viztree
def main(args):

    root = args.path
    if not check(root):
        raise ValueError("Warning! Root directory isn't valid")

    max_dep = args.depth
    max_file = args.file
    assert max_dep > 0 and max_file > 0

    print("{Visual Tree}")

    dir_count = 0
    file_count = 0
    for path, _, files in sorted(filtered_walk(root, depth=max_dep)):
        level = offset(root, path)
        base = os.path.basename(path)

        if level == 1:
            print(path)
        else:
            print(INDENT * level + SYMBOL + base)
        dir_count += 1

        # display files
        level += 1
        local_count = 0
        display = True
        for file in sorted(files):
            file_count += 1
            local_count += 1
            if display:
                print(INDENT * level + SYMBOL + file)
            if local_count == max_file + 1:
                display = False
                print(INDENT * level + SYMBOL + "...")

    summary(root, dir_count, file_count)
예제 #8
0
    def __init__(self, args, manager, config, pretrain=False, inference=False):
        self.disc_type = args.gan_type
        if self.disc_type == 'vanilla':
            self.irl = DISC_Vanilla(config, args.gamma).to(device=DEVICE)
        elif self.disc_type == 'wgan':
            self.irl = DISC_MTSA(config, args.gamma).to(device=DEVICE)
        else:
            raise ValueError(" No such type: {}".format(self.disc_type))
        logging.info(summary(self.irl, show_weights=False))
        self.net_type = args.irl_net
        self.train_direc = args.train_direc
        self.mt_factor = args.mt_factor
        self.action_lambda = 0
        self.bce_loss = nn.BCEWithLogitsLoss()
        self.multi_entropy_loss = nn.MultiLabelSoftMarginLoss()
        self.loss_BCE = nn.BCELoss()

        self.step = 0
        self.anneal = args.anneal
        self.irl_params = self.irl.parameters()
        self.irl_optim = optim.Adam(self.irl_params, lr=args.lr_irl)
        self.weight_cliping_limit = args.clip

        self.save_dir = args.save_dir
        self.save_per_epoch = args.save_per_epoch
        self.optim_batchsz = args.batchsz
        self.irl.eval()

        db = DBQuery(args.data_dir)
        if pretrain:
            self.print_per_batch = args.print_per_batch
            self.data_train = manager.create_dataset_irl(
                'train', args.batchsz, config, db)
            self.data_valid = manager.create_dataset_irl(
                'valid', args.batchsz, config, db)
            self.data_test = manager.create_dataset_irl(
                'test', args.batchsz, config, db)
            self.irl_iter = iter(self.data_train)
            self.irl_iter_valid = iter(self.data_valid)
            self.irl_iter_test = iter(self.data_test)
        elif not inference:
            self.data_train = manager.create_dataset_irl(
                'train', args.batchsz, config, db)
            self.data_valid = manager.create_dataset_irl(
                'valid', args.batchsz, config, db)
            self.irl_iter = iter(self.data_train)
            self.irl_iter_valid = iter(self.data_valid)
예제 #9
0
파일: views.py 프로젝트: ezl/recs
def trade(request):
    OC_trades = match.OC_trades
    NE_trades = match.NE_trades

    # trade exceptions
    unmatched_instruments = set([t[0] for t in OC_trades] + [t[0] for t in NE_trades])
    trade_exceptions = [
        [
            i,
            filter(lambda x: x[0] == i, OC_trades),
            filter(lambda x: x[0] == i, NE_trades),
            summary(i, OC_trades),
            summary(i, NE_trades),
        ]
        for i in unmatched_instruments
    ]
    trade_exceptions.sort(cmp_instruments)

    # matched legs
    matched_legs = [
        [
            i,
            filter(lambda x: x[0] == i, match.OC_matched_legs),
            filter(lambda x: x[0] == i, match.NE_matched_legs),
            summary(i, match.OC_matched_legs),
            summary(i, match.NE_matched_legs),
        ]
        for i in set([t[0] for t in match.OC_matched_legs])
    ]
    matched_legs.sort(cmp_instruments)

    # matched split quantity/price single legs
    matched_split_qty = [
        [
            i,
            filter(lambda x: x[0] == i, match.OC_matched_split_qty),
            filter(lambda x: x[0] == i, match.NE_matched_split_qty),
            summary(i, match.OC_matched_split_qty),
            summary(i, match.NE_matched_split_qty),
        ]
        for i in set([t[0] for t in match.OC_matched_split_qty])
    ]
    matched_split_qty.sort(cmp_instruments)

    # exact matches
    exact_matches = match.exact_matches

    template_name = "trade.html"
    return direct_to_template(request, template_name, locals())
예제 #10
0
def build(batch_size):
    gp_lambda = 10
    
    """ graphs """
    with tf.device('/gpu:0'):
        optimizer = tf.train.AdamOptimizer(learning_rate=0.0001, beta1=0, beta2 = 0.99)
        
        ''' graph definition '''
        ''' declare all of variables to be used with dummy '''
        alpha = tf.placeholder(tf.float32, shape=[1])
        real = tf.placeholder(tf.float32, shape=[batch_size, target_size, target_size, 3])
        real = (1.-alpha)*down_up(real) + alpha * real
        z1 = tf.placeholder(tf.float32, shape=[batch_size, z_dim])
        z2 = tf.placeholder(tf.float32, shape=[batch_size, z_dim])
        real_dummy = tf.placeholder(tf.float32, shape=[2, final_size, final_size, 3])
        z1_dummy = tf.placeholder(tf.float32, shape=[2, z_dim])
        z2_dummy = tf.placeholder(tf.float32, shape=[2, z_dim])
        
        fake1 = generator(z1, target_size, alpha)
        fake2 = generator(z2, target_size, alpha)
        fake1_dummy = generator(z1_dummy, final_size, alpha)
        fake2_dummy = generator(z2_dummy, final_size, alpha)

        r_logit = discriminator(real, alpha)
        f1_logit = discriminator(fake1, alpha)
        f2_logit = discriminator(fake2, alpha)
        r_logit_dummy = discriminator(real_dummy, alpha)
        f1_logit_dummy = discriminator(fake1_dummy, alpha)
        f2_logit_dummy = discriminator(fake2_dummy, alpha)
        
        # Cramer GAN losses
        def L2(logit):
            ret = tf.sqrt( tf.reduce_sum( tf.square( logit ), axis = 1 ) )
            return ret

        def critic(logit, logitd):
            return tf.reduce_mean(L2( logit - logitd ) - L2( logit ))

        def gradient_penalty(bsz, real, fake, logitd):
            def interpolate(a, b):
                rg = tf.random_uniform(shape=[bsz,1,1,1], minval=0., maxval=1.)
                return rg * a + (1.-rg)*b

            x = interpolate(real, fake)
            pred = discriminator(x, alpha)
            pred = L2( pred - logitd ) - L2( pred )
            grad = tf.reshape(tf.gradients(pred, x)[0], shape=[bsz, -1])
            
            # when P_fake ~= P_real, for almost all x in the distribution has 1 L2-norm
            return tf.reduce_mean((L2(grad)-1)**2.0)
        
        g_loss = tf.reduce_mean(L2(r_logit - f1_logit) + L2( r_logit - f2_logit ) - L2( f1_logit - f2_logit ))
        g_surr = critic(r_logit, f2_logit) - critic( f1_logit, f2_logit )
        gp = gp_lambda * gradient_penalty(batch_size, real, fake1, f2_logit)
        d_loss = -g_surr + gp
        
        g_loss_dummy = tf.reduce_mean(L2(r_logit_dummy - f1_logit_dummy) + L2( r_logit_dummy - f2_logit_dummy ) - L2( f1_logit_dummy - f2_logit_dummy ))
        g_surr_dummy = critic(r_logit_dummy, f2_logit_dummy) - critic( f1_logit_dummy, f2_logit_dummy )
        gp_dummy = gp_lambda * gradient_penalty(2, real_dummy, fake1_dummy, f2_logit_dummy)
        d_loss_dummy = -g_surr_dummy + gp_dummy
        
        g_vars = []
        d_vars = []
        for vari in tf.trainable_variables():
            if vari.name.startswith('x/g'):
                g_vars.append(vari)
            if vari.name.startswith('x/d'):
                d_vars.append(vari)

        # otpims
        g_step = optimizer.minimize(g_loss, var_list=g_vars)
        d_step = optimizer.minimize(d_loss, var_list=d_vars)
        g_step_dummy = optimizer.minimize(g_loss_dummy, var_list=g_vars)
        d_step_dummy = optimizer.minimize(d_loss_dummy, var_list=d_vars)

        # summaries
        g_summary = utils.summary({g_loss: 'g_loss'})
        d_summary = utils.summary({d_loss: 'd_loss', gp : 'grad_penal'})#, wd: 'wd', gp: 'gp', rlm:'rlm'})

        # sample
        f_sample = generator(z1, target_size, alpha)

    return {\
    'dummy' : { 'd' : d_step_dummy, 'g' : g_step_dummy,\
        'input' : { 'real' : real_dummy, 'z1' : z1_dummy, 'z2' : z2_dummy, 'alpha' : alpha }  },\
    'product' : { 'd' : d_step, 'g' : g_step,\
        'input' : { 'real' : real, 'z1' : z1, 'z2' : z2, 'alpha' : alpha } },\
    'sample' : f_sample, 'summaries' : {'d' : d_summary, 'g': g_summary } }
예제 #11
0
    def train(ctx):
        if isinstance(ctx, mx.Context):
            ctx = [ctx]
        if opt.resume_params == '':
            net.initialize(mx.init.MSRAPrelu(), ctx=ctx)

        if opt.summary:
            # net.summary(mx.nd.zeros((1, 3, opt.input_size, opt.input_size), ctx=ctx[0]))
            summary(net, mx.nd.zeros((1, 3, opt.input_size, opt.input_size), ctx=ctx[0]))
            sys.exit()

        if opt.no_wd:
            for k, v in net.collect_params('.*beta|.*gamma|.*bias').items():
                v.wd_mult = 0.0

        trainer = gluon.Trainer(net.collect_params(), optimizer, optimizer_params)
        if opt.resume_states != '':
            trainer.load_states(opt.resume_states)

        if opt.label_smoothing or opt.mixup:
            sparse_label_loss = False
        else:
            sparse_label_loss = True
        if distillation:
            L = gcv.loss.DistillationSoftmaxCrossEntropyLoss(temperature=opt.temperature,
                                                                 hard_weight=opt.hard_weight,
                                                                 sparse_label=sparse_label_loss)
        else:
            L = gluon.loss.SoftmaxCrossEntropyLoss(sparse_label=sparse_label_loss)

        best_val_score = 1

        for epoch in range(opt.resume_epoch, opt.num_epochs):
            tic = time.time()
            if opt.use_rec:
                train_data.reset()
            train_metric.reset()
            btic = time.time()

            for i, batch in enumerate(train_data):
                data, label = batch_fn(batch, ctx)

                if opt.mixup:
                    lam = np.random.beta(opt.mixup_alpha, opt.mixup_alpha)
                    if epoch >= opt.num_epochs - opt.mixup_off_epoch:
                        lam = 1
                    data = [lam*X + (1-lam)*X[::-1] for X in data]

                    if opt.label_smoothing:
                        eta = 0.1
                    else:
                        eta = 0.0
                    label = mixup_transform(label, classes, lam, eta)

                elif opt.label_smoothing:
                    hard_label = label
                    label = smooth(label, classes)

                if distillation:
                    teacher_prob = [nd.softmax(teacher(X.astype(opt.dtype, copy=False)) / opt.temperature) \
                                    for X in data]

                with ag.record():
                    outputs = [net(X.astype(opt.dtype, copy=False)) for X in data]
                    if distillation:
                        loss = [L(yhat.astype('float32', copy=False),
                                  y.astype('float32', copy=False),
                                  p.astype('float32', copy=False)) for yhat, y, p in zip(outputs, label, teacher_prob)]
                    else:
                        loss = [L(yhat, y.astype(opt.dtype, copy=False)) for yhat, y in zip(outputs, label)]
                for l in loss:
                    l.backward()
                trainer.step(batch_size)

                if opt.mixup:
                    output_softmax = [nd.SoftmaxActivation(out.astype('float32', copy=False)) \
                                    for out in outputs]
                    train_metric.update(label, output_softmax)
                else:
                    if opt.label_smoothing:
                        train_metric.update(hard_label, outputs)
                    else:
                        train_metric.update(label, outputs)

                if opt.log_interval and not (i+1)%opt.log_interval:
                    train_metric_name, train_metric_score = train_metric.get()
                    logger.info('Epoch[%d] Batch [%d]\tSpeed: %f samples/sec\t%s=%f\tlr=%f'%(
                                epoch, i, batch_size*opt.log_interval/(time.time()-btic),
                                train_metric_name, train_metric_score, trainer.learning_rate))
                    btic = time.time()

            train_metric_name, train_metric_score = train_metric.get()
            throughput = int(batch_size * i /(time.time() - tic))

            err_top1_val, err_top5_val = test(ctx, val_data)

            logger.info('[Epoch %d] training: %s=%f'%(epoch, train_metric_name, train_metric_score))
            logger.info('[Epoch %d] speed: %d samples/sec\ttime cost: %f'%(epoch, throughput, time.time()-tic))
            logger.info('[Epoch %d] validation: err-top1=%f err-top5=%f'%(epoch, err_top1_val, err_top5_val))

            if err_top1_val < best_val_score:
                best_val_score = err_top1_val
                net.save_parameters('%s/%.4f-imagenet-%s-%d-best.params'%(save_dir, best_val_score, model_name, epoch))
                trainer.save_states('%s/%.4f-imagenet-%s-%d-best.states'%(save_dir, best_val_score, model_name, epoch))

            if save_frequency and save_dir and (epoch + 1) % save_frequency == 0:
                net.save_parameters('%s/imagenet-%s-%d.params'%(save_dir, model_name, epoch))
                trainer.save_states('%s/imagenet-%s-%d.states'%(save_dir, model_name, epoch))

        if save_frequency and save_dir:
            net.save_parameters('%s/imagenet-%s-%d.params'%(save_dir, model_name, opt.num_epochs-1))
            trainer.save_states('%s/imagenet-%s-%d.states'%(save_dir, model_name, opt.num_epochs-1))
예제 #12
0
def main(args, **model_kwargs):
    device = torch.device(args.device)
    args.device = device
    if args.dataset == 'abilene_tm':
        args.nNodes = 12
        args.day_size = 288
    elif args.dataset == 'geant_tm':
        args.nNodes = 22
        args.day_size = 96
    elif args.dataset == 'brain_tm':
        args.nNodes = 9
        args.day_size = 1440
    elif 'sinet' in args.dataset:
        args.nNodes = 73
        args.day_size = 288
    else:
        raise ValueError('Dataset not found!')

    train_loader, val_loader, test_loader, graphs, top_k_index = utils.get_dataloader(
        args)

    args.train_size, args.nSeries = train_loader.dataset.X.shape
    args.val_size = val_loader.dataset.X.shape[0]
    args.test_size = test_loader.dataset.X.shape[0]

    in_dim = 1
    if args.tod:
        in_dim += 1
    if args.ma:
        in_dim += 1
    if args.mx:
        in_dim += 1

    args.in_dim = in_dim

    model = models.get_model(args)
    logger = utils.Logger(args)

    engine = utils.Trainer.from_args(model, train_loader.dataset.scaler, \
                        train_loader.dataset.scaler_top_k, args)

    utils.print_args(args)

    if not args.test:
        iterator = trange(args.epochs)

        try:
            if os.path.isfile(logger.best_model_save_path):
                print('Model checkpoint exist!')
                print('Load model checkpoint? (y/n)')
                _in = input()
                if _in == 'y' or _in == 'yes':
                    print('Loading model...')
                    engine.model.load_state_dict(
                        torch.load(logger.best_model_save_path))
                else:
                    print('Training new model')

            for epoch in iterator:
                train_loss, train_rse, train_mae, train_mse, train_mape, train_rmse = [], [], [], [], [], []
                for iter, batch in enumerate(train_loader):

                    # x = batch['x']  # [b, seq_x, n, f]
                    # y = batch['y']  # [b, seq_y, n]

                    x = batch['x_top_k']
                    y = batch['y_top_k']

                    if y.max() == 0: continue
                    loss, rse, mae, mse, mape, rmse = engine.train(x, y)
                    train_loss.append(loss)
                    train_rse.append(rse)
                    train_mae.append(mae)
                    train_mse.append(mse)
                    train_mape.append(mape)
                    train_rmse.append(rmse)

                engine.scheduler.step()
                with torch.no_grad():
                    val_loss, val_rse, val_mae, val_mse, val_mape, val_rmse = engine.eval(
                        val_loader)
                m = dict(train_loss=np.mean(train_loss),
                         train_rse=np.mean(train_rse),
                         train_mae=np.mean(train_mae),
                         train_mse=np.mean(train_mse),
                         train_mape=np.mean(train_mape),
                         train_rmse=np.mean(train_rmse),
                         val_loss=np.mean(val_loss),
                         val_rse=np.mean(val_rse),
                         val_mae=np.mean(val_mae),
                         val_mse=np.mean(val_mse),
                         val_mape=np.mean(val_mape),
                         val_rmse=np.mean(val_rmse))

                description = logger.summary(m, engine.model)

                if logger.stop:
                    break

                description = 'Epoch: {} '.format(epoch) + description
                iterator.set_description(description)
        except KeyboardInterrupt:
            pass

    # Metrics on test data
    engine.model.load_state_dict(torch.load(logger.best_model_save_path))
    with torch.no_grad():
        test_met_df, x_gt, y_gt, y_real, yhat = engine.test(
            test_loader, engine.model, args.out_seq_len)
        test_met_df.round(6).to_csv(
            os.path.join(logger.log_dir, 'test_metrics.csv'))
        print('Prediction Accuracy:')
        print(utils.summary(logger.log_dir))

    if args.plot:
        logger.plot(x_gt, y_real, yhat)

    x_gt = x_gt.cpu().data.numpy()  # [timestep, seq_x, seq_y]
    y_gt = y_gt.cpu().data.numpy()
    yhat = yhat.cpu().data.numpy()

    # run TE
    if args.run_te:
        psi = get_psi(args)
        G = get_G(args)
        R = get_R(args)

        A = np.dot(R * G, psi)
        y_cs = np.zeros(y_gt.shape)

        # for i in range(y_gt.shape[0]):
        #     temp = np.linalg.inv(np.dot(A, A.T))
        #     S = np.dot(np.dot(A.T, temp), yhat[i].T)
        #     y_cs[i] = np.dot(psi, S).T

        for i in range(y_gt.shape[0]):
            m = A.shape[1]
            S = cvx.Variable(m)
            objective = cvx.Minimize(cvx.norm(S, p=0))
            constraint = [yhat[i].T == A * S]

            prob = cvx.Problem(objective, constraint)
            prob.solve()

            y_cs[i] = S.value.reshape(1, m)
        run_te(x_gt, y_gt, y_cs, args)
                plt.vlines(x=df_temp1['LOW_SPEC'][0], ymin=0, ymax=max(counts), color='red',label='Lower specification')
            
            if str(df_temp1['HIGH_SPEC'][0]) != 'nan':
                plt.vlines(x=df_temp1['HIGH_SPEC'][0], ymin=0, ymax=max(counts), color='red',label='Higher specification')
            plt.grid()
            plt.legend()
            plt.savefig('../infoMatcode/' + folder + '/' + str(anal) + '/brut/' + 'distribution.jpg')

            # Necessary statistics and data cleaning:
            nb_points = int(len(df_temp1['FINAL']))
            nb_batchs = int(len(np.unique(df_temp1['BATCH'])))
            low_spec = df_temp1['LOW_SPEC'][0]
            high_spec = df_temp1['HIGH_SPEC'][0]
            min_val = df_temp1['FINAL'].min()
            max_val = df_temp1['FINAL'].max()
            Low_tuck,Upp_tuck,mean,std = utils.summary(df_temp1['FINAL'].tolist())
            df_out_sup = df_temp1[df_temp1.FINAL > (mean + 5*std)]
            df_out_inf = df_temp1[df_temp1.FINAL < (mean - 5*std)]
            df_out = pd.concat([df_out_sup,df_out_inf]) 
            nb_outliers = float(len(df_out))
            rate = round(float((nb_outliers/nb_points))*100,3)
            df_concat = pd.concat([df_temp1,df_out])
            df_temp1 = df_concat.drop_duplicates(keep = False)
            new_mean = round(np.mean(df_temp1['FINAL'].tolist()),3)
            nb_new_data = float(len(df_temp1))
            
            # Write statistics in a file:
            file1 = open('../infoMatcode/' + folder + '/' + str(anal) + '/' + 'statistics.txt',"w") 
            L = ["Number of material tested          : "+str(nb_points)+"\n",
                "Number of batch tested             : "+str(nb_batchs)+"\n\n",
                "Minimum value of tests             : "+str(min_val)+"\n",
예제 #14
0
        gp = tf.reduce_mean((slopes - 1.)**2)
        return gp

    wd = tf.reduce_mean(r_logit) - tf.reduce_mean(f_logit)
    gp = gradient_penalty(real, fake, discriminator)
    d_loss = -wd + gp * 10.0
    g_loss = -tf.reduce_mean(f_logit)

    # otpims
    d_var = utils.trainable_variables('discriminator')
    g_var = utils.trainable_variables('generator')
    d_step = tf.train.AdamOptimizer(learning_rate=lr, beta1=0.5).minimize(d_loss, var_list=d_var)
    g_step = tf.train.AdamOptimizer(learning_rate=lr, beta1=0.5).minimize(g_loss, var_list=g_var)

    # summaries
    d_summary = utils.summary({wd: 'wd', gp: 'gp', d_loss: 'd_loss'})
    g_summary = utils.summary({g_loss: 'g_loss'})

    # sample
    f_sample = generator(z, training=False)


""" train """
''' init '''
# session
sess = utils.session()
# iteration counter
it_cnt, update_cnt = utils.counter()
# saver
saver = tf.train.Saver(max_to_keep=5)
# summary writer
예제 #15
0
def classify(train, examples):
    cv_res = {
     "PP": 0,
     "PN": 0,
     "NP": 0,
     "NN": 0,
     "contradictory": 0,
    }
    plus = train["plus"]
    minus = train["minus"]
    l = len(examples)
    i = 0
    for elem in examples:
        i += 1
        print "%i/%i" % (i, l)
        result = check_hypothesis(plus, minus, elem)
        cv_res[result] += 1
    return cv_res


if __name__ == "__main__":

    index = int(sys.argv[1])

    train = utils.load_train(index)
    test = utils.load_test(index)

    res = classify(train, test)
    print res
    print utils.summary(res)
예제 #16
0
def main(args, **model_kwargs):
    device = torch.device(args.device)
    args.device = device
    if 'abilene' in args.dataset:
        args.nNodes = 12
        args.day_size = 288
    elif 'geant' in args.dataset:
        args.nNodes = 22
        args.day_size = 96
    elif 'brain' in args.dataset:
        args.nNodes = 9
        args.day_size = 1440
    elif 'sinet' in args.dataset:
        args.nNodes = 74
        args.day_size = 288
    else:
        raise ValueError('Dataset not found!')

    train_loader, val_loader, test_loader, top_k_index = utils.get_dataloader(
        args)

    args.train_size, args.nSeries = train_loader.dataset.X_scaled_top_k.shape
    args.val_size = val_loader.dataset.X_scaled_top_k.shape[0]
    args.test_size = test_loader.dataset.X_scaled_top_k.shape[0]

    in_dim = 1
    if args.tod:
        in_dim += 1
    if args.ma:
        in_dim += 1
    if args.mx:
        in_dim += 1

    args.in_dim = in_dim

    aptinit, supports = utils.make_graph_inputs(args, device)

    model = models.GWNet.from_args(args, supports, aptinit, **model_kwargs)
    model.to(device)
    logger = utils.Logger(args)

    engine = utils.Trainer.from_args(model, train_loader.dataset.scaler,
                                     train_loader.dataset.scaler_top_k, args)

    utils.print_args(args)

    if not args.test:
        iterator = trange(args.epochs)

        try:
            if os.path.isfile(logger.best_model_save_path):
                print('Model checkpoint exist!')
                print('Load model checkpoint? (y/n)')
                _in = input()
                if _in == 'y' or _in == 'yes':
                    print('Loading model...')
                    engine.model.load_state_dict(
                        torch.load(logger.best_model_save_path))
                else:
                    print('Training new model')

            for epoch in iterator:
                train_loss, train_rse, train_mae, train_mse, train_mape, train_rmse = [], [], [], [], [], []
                for iter, batch in enumerate(train_loader):

                    # x = batch['x']  # [b, seq_x, n, f]
                    # y = batch['y']  # [b, seq_y, n]
                    # sys.exit()
                    x = batch['x_top_k']
                    y = batch['y_top_k']

                    if y.max() == 0: continue
                    loss, rse, mae, mse, mape, rmse = engine.train(x, y)
                    train_loss.append(loss)
                    train_rse.append(rse)
                    train_mae.append(mae)
                    train_mse.append(mse)
                    train_mape.append(mape)
                    train_rmse.append(rmse)

                engine.scheduler.step()
                with torch.no_grad():
                    val_loss, val_rse, val_mae, val_mse, val_mape, val_rmse = engine.eval(
                        val_loader)
                m = dict(train_loss=np.mean(train_loss),
                         train_rse=np.mean(train_rse),
                         train_mae=np.mean(train_mae),
                         train_mse=np.mean(train_mse),
                         train_mape=np.mean(train_mape),
                         train_rmse=np.mean(train_rmse),
                         val_loss=np.mean(val_loss),
                         val_rse=np.mean(val_rse),
                         val_mae=np.mean(val_mae),
                         val_mse=np.mean(val_mse),
                         val_mape=np.mean(val_mape),
                         val_rmse=np.mean(val_rmse))

                description = logger.summary(m, engine.model)

                if logger.stop:
                    break

                description = 'Epoch: {} '.format(epoch) + description
                iterator.set_description(description)
        except KeyboardInterrupt:
            pass

    # Metrics on test data
    engine.model.load_state_dict(torch.load(logger.best_model_save_path))
    with torch.no_grad():
        test_met_df, x_gt, y_gt, y_real, yhat = engine.test(
            test_loader, engine.model, args.out_seq_len)
        test_met_df.round(6).to_csv(
            os.path.join(logger.log_dir, 'test_metrics.csv'))
        print('Prediction Accuracy:')
        print(utils.summary(logger.log_dir))

    if args.plot:
        logger.plot(x_gt, y_real, yhat)

    x_gt = x_gt.cpu().data.numpy()  # [timestep, seq_x, seq_y]
    y_gt = y_gt.cpu().data.numpy()
    yhat = yhat.cpu().data.numpy()

    ygt_shape = y_gt.shape
    if args.cs:
        print('|--- Traffic reconstruction using CS')
        y_cs = np.zeros(shape=(ygt_shape[0], 1, ygt_shape[-1]))

        # obtain psi, G, R
        path_psi_phi = os.path.join(logger.log_dir,
                                    '{}_psi_phi.pkl'.format(args.dataset))
        if not os.path.isfile(path_psi_phi):
            psi = get_psi(args)
            phi = get_phi(args, top_k_index)
            obj = {'psi': psi, 'phi': phi}
            with open(path_psi_phi, 'wb') as fp:
                pickle.dump(obj, fp, protocol=pickle.HIGHEST_PROTOCOL)
        else:
            with open(path_psi_phi, 'rb') as fp:
                obj = pickle.load(fp)
            psi = obj['psi']
            phi = obj['phi']
        np.save('psi.npy', psi.matrix)

        # traffic reconstruction using compressive sensing
        A = np.dot(phi, psi.matrix)
        for i in range(y_cs.shape[0]):
            sparse = Solver_l0(A,
                               max_iter=100,
                               sparsity=int(args.random_rate / 100 *
                                            y_cs.shape[-1])).fit(yhat[i].T)
            y_cs[i] = np.dot(psi.matrix, sparse).T

        # y_cs[:, :, top_k_index] = yhat

    else:
        print('|--- No traffic reconstruction')
        y_cs = np.ones(shape=(ygt_shape[0], 1, ygt_shape[-1]))
        y_cs[:, :, top_k_index] = yhat

    x_gt = torch.from_numpy(x_gt).to(args.device)
    y_gt = torch.from_numpy(y_gt).to(args.device)
    y_cs = torch.from_numpy(y_cs).to(args.device)
    y_cs[y_cs < 0] = 0
    test_met = []
    for i in range(y_cs.shape[1]):
        pred = y_cs[:, i, :]
        pred = torch.clamp(pred, min=0., max=10e10)
        real = y_real[:, i, :]
        test_met.append([x.item() for x in calc_metrics(pred, real)])
    test_met_df = pd.DataFrame(test_met,
                               columns=['rse', 'mae', 'mse', 'mape',
                                        'rmse']).rename_axis('t')
    test_met_df.round(6).to_csv(
        os.path.join(logger.log_dir, 'test_metrics.csv'))
    print('Prediction Accuracy:')
    print(utils.summary(logger.log_dir))

    if args.run_te:
        x_gt = x_gt.cpu().data.numpy()  # [timestep, seq_x, seq_y]
        y_gt = y_gt.cpu().data.numpy()
        y_cs = y_cs.cpu().data.numpy()

        run_te(x_gt, y_gt, y_cs, args)
def train():
    epoch = 200
    batch_size = 1
    lr = 0.0002
    crop_size = 128
    load_size = 128
    tar_db_a = "cameron_images.tgz"
    tar_db_b = "teresa_images.tgz"
    db_a_i = importer_tar.Importer(tar_db_a)
    db_b_i = importer_tar.Importer(tar_db_b)
    image_a_names = db_a_i.get_sorted_image_name()
    image_b_names = db_b_i.get_sorted_image_name()
    train_a_size = int(len(image_a_names) * 0.8)
    train_b_size = int(len(image_b_names) * 0.8)

    image_a_train_names = image_a_names[0:train_a_size]
    image_b_train_names = image_b_names[0:train_b_size]

    image_a_test_names = image_a_names[train_a_size:]
    image_b_test_names = image_b_names[train_b_size:]

    print("A train size:{},test size:{}".format(len(image_a_train_names),
                                                len(image_a_test_names)))
    print("B train size:{},test size:{}".format(len(image_b_train_names),
                                                len(image_b_test_names)))
    """ graph """
    # models
    generator_a2b = partial(models.generator, scope='a2b')
    generator_b2a = partial(models.generator, scope='b2a')
    discriminator_a = partial(models.discriminator, scope='a')
    discriminator_b = partial(models.discriminator, scope='b')

    # operations
    a_real_in = tf.placeholder(tf.float32,
                               shape=[None, load_size, load_size, 3],
                               name="a_real")
    b_real_in = tf.placeholder(tf.float32,
                               shape=[None, load_size, load_size, 3],
                               name="b_real")
    a_real = utils.preprocess_image(a_real_in, crop_size=crop_size)
    b_real = utils.preprocess_image(b_real_in, crop_size=crop_size)

    a2b = generator_a2b(a_real)
    b2a = generator_b2a(b_real)
    b2a2b = generator_a2b(b2a)
    a2b2a = generator_b2a(a2b)

    a_logit = discriminator_a(a_real)
    b2a_logit = discriminator_a(b2a)
    b_logit = discriminator_b(b_real)
    a2b_logit = discriminator_b(a2b)

    # losses
    g_loss_a2b = -tf.reduce_mean(a2b_logit)
    g_loss_b2a = -tf.reduce_mean(b2a_logit)

    cyc_loss_a = tf.losses.absolute_difference(a_real, a2b2a)
    cyc_loss_b = tf.losses.absolute_difference(b_real, b2a2b)
    g_loss = g_loss_a2b + g_loss_b2a + cyc_loss_a * 10.0 + cyc_loss_b * 10.0

    wd_a = tf.reduce_mean(a_logit) - tf.reduce_mean(b2a_logit)
    wd_b = tf.reduce_mean(b_logit) - tf.reduce_mean(a2b_logit)

    gp_a = gradient_penalty(a_real, b2a, discriminator_a)
    gp_b = gradient_penalty(b_real, a2b, discriminator_b)

    d_loss_a = -wd_a + 10.0 * gp_a
    d_loss_b = -wd_b + 10.0 * gp_b

    # summaries
    utils.summary({
        g_loss_a2b: 'g_loss_a2b',
        g_loss_b2a: 'g_loss_b2a',
        cyc_loss_a: 'cyc_loss_a',
        cyc_loss_b: 'cyc_loss_b'
    })
    utils.summary({d_loss_a: 'd_loss_a'})
    utils.summary({d_loss_b: 'd_loss_b'})
    for variable in slim.get_model_variables():
        tf.summary.histogram(variable.op.name, variable)
    merged = tf.summary.merge_all()

    im1_op = tf.summary.image("real_a", a_real_in)
    im2_op = tf.summary.image("a2b", a2b)
    im3_op = tf.summary.image("b2a2b", b2a2b)
    im4_op = tf.summary.image("real_b", b_real_in)
    im5_op = tf.summary.image("b2a", b2a)
    im6_op = tf.summary.image("b2a2b", b2a2b)

    # optim
    t_var = tf.trainable_variables()
    d_a_var = [var for var in t_var if 'a_discriminator' in var.name]
    d_b_var = [var for var in t_var if 'b_discriminator' in var.name]
    g_var = [
        var for var in t_var
        if 'a2b_generator' in var.name or 'b2a_generator' in var.name
    ]

    d_a_train_op = tf.train.AdamOptimizer(lr,
                                          beta1=0.5).minimize(d_loss_a,
                                                              var_list=d_a_var)
    d_b_train_op = tf.train.AdamOptimizer(lr,
                                          beta1=0.5).minimize(d_loss_b,
                                                              var_list=d_b_var)
    g_train_op = tf.train.AdamOptimizer(lr, beta1=0.5).minimize(g_loss,
                                                                var_list=g_var)
    """ train """
    ''' init '''
    # session
    config = tf.ConfigProto(allow_soft_placement=True)
    config.gpu_options.allow_growth = True
    sess = tf.Session(config=config)

    # counter
    it_cnt, update_cnt = utils.counter()
    ''' summary '''
    summary_writer = tf.summary.FileWriter('./outputs/summaries/', sess.graph)
    ''' saver '''
    saver = tf.train.Saver(max_to_keep=5)
    ''' restore '''
    ckpt_dir = './outputs/checkpoints/'
    utils.mkdir(ckpt_dir)
    try:
        utils.load_checkpoint(ckpt_dir, sess)
    except:
        sess.run(tf.global_variables_initializer())
    '''train'''
    try:
        batch_epoch = min(train_a_size, train_b_size) // batch_size
        max_it = epoch * batch_epoch
        for it in range(sess.run(it_cnt), max_it):
            sess.run(update_cnt)
            epoch = it // batch_epoch
            it_epoch = it % batch_epoch + 1

            # read data
            a_real_np = cv2.resize(
                db_a_i.get_image(image_a_train_names[it_epoch % batch_epoch]),
                (load_size, load_size))
            b_real_np = cv2.resize(
                db_b_i.get_image(image_b_train_names[it_epoch % batch_epoch]),
                (load_size, load_size))

            # train G
            sess.run(g_train_op,
                     feed_dict={
                         a_real_in: [a_real_np],
                         b_real_in: [b_real_np]
                     })

            # train discriminator
            sess.run([d_a_train_op, d_b_train_op],
                     feed_dict={
                         a_real_in: [a_real_np],
                         b_real_in: [b_real_np]
                     })

            # display
            if it % 100 == 0:
                # make summary
                summary = sess.run(merged,
                                   feed_dict={
                                       a_real_in: [a_real_np],
                                       b_real_in: [b_real_np]
                                   })
                summary_writer.add_summary(summary, it)
                print("Epoch: (%3d) (%5d/%5d)" %
                      (epoch, it_epoch, batch_epoch))

            # save
            if (it + 1) % 1000 == 0:
                save_path = saver.save(
                    sess, '{}/epoch_{}_{}.ckpt'.format(ckpt_dir, epoch,
                                                       it_epoch))
                print('###Model saved in file: {}'.format(save_path))

            # sample
            if (it + 1) % 1000 == 0:
                a_test_index = int(
                    np.random.uniform(high=len(image_a_test_names)))
                b_test_index = int(
                    np.random.uniform(high=len(image_b_test_names)))
                a_real_np = cv2.resize(
                    db_a_i.get_image(image_a_test_names[a_test_index]),
                    (load_size, load_size))
                b_real_np = cv2.resize(
                    db_b_i.get_image(image_b_test_names[b_test_index]),
                    (load_size, load_size))

                [a_opt, a2b_opt, a2b2a_opt, b_opt, b2a_opt, b2a2b_opt
                 ] = sess.run([a_real, a2b, a2b2a, b_real, b2a, b2a2b],
                              feed_dict={
                                  a_real_in: [a_real_np],
                                  b_real_in: [b_real_np]
                              })

                sample_opt = np.concatenate(
                    (a_opt, a2b_opt, a2b2a_opt, b_opt, b2a_opt, b2a2b_opt),
                    axis=0)
                [im1_sum,im2_sum,im3_sum,im4_sum,im5_sum,im6_sum] = \
                    sess.run([im1_op,im2_op,im3_op,im4_op,im5_op,im6_op],
                             feed_dict={a_real_in: [a_real_np], b_real_in: [b_real_np]})

                summary_writer.add_summary(im1_sum, it)
                summary_writer.add_summary(im2_sum, it)
                summary_writer.add_summary(im3_sum, it)
                summary_writer.add_summary(im4_sum, it)
                summary_writer.add_summary(im5_sum, it)
                summary_writer.add_summary(im6_sum, it)

                save_dir = './outputs/sample_images_while_training/'
                utils.mkdir(save_dir)
                im.imwrite(
                    im.immerge(sample_opt, 2, 3),
                    '{}/epoch_{}_it_{}.jpg'.format(save_dir, epoch, it_epoch))
    except:
        raise

    finally:
        save_path = saver.save(
            sess, '{}/epoch_{}_{}.ckpt'.format(ckpt_dir, epoch, it_epoch))
        print('###Model saved in file: {}'.format(save_path))
        sess.close()
예제 #18
0
def main_worker(gpu, args):
    """
    模型训练、测试、转JIT、蒸馏文件制作
    :param gpu: 运行的gpu id
    :param args: 运行超参
    """
    args.gpu = gpu
    utils.generate_logger(f"{datetime.datetime.now().strftime('%Y%m%d%H%M%S')}-{gpu}.log")
    logging.info(f'args: {args}')

    # 可复现性
    if args.seed is not None:
        random.seed(args.seed)
        torch.manual_seed(args.seed)
        cudnn.deterministic = True
        logging.warning('You have chosen to seed training. '
                        'This will turn on the CUDNN deterministic setting, '
                        'which can slow down your training considerably! '
                        'You may see unexpected behavior when restarting '
                        'from checkpoints.')

    if args.cuda:
        logging.info(f"Use GPU: {args.gpu} ~")
        if args.distributed:
            args.rank = args.rank * args.gpus + gpu
            dist.init_process_group(backend='nccl', init_method=args.init_method,
                                    world_size=args.world_size, rank=args.rank)
    else:
        logging.info(f"Use CPU ~")

    # 创建/加载模型,使用预训练模型时,需要自己先下载好放到 pretrained 文件夹下,以网络名词命名
    logging.info(f"=> creating model '{args.arch}'")
    model = my_models.get_model(args.arch, args.pretrained, num_classes=args.num_classes)

    # 重加载之前训练好的模型
    if args.resume:
        if os.path.isfile(args.resume):
            logging.info(f"=> loading checkpoint '{args.resume}'")
            checkpoint = torch.load(args.resume, map_location=torch.device('cpu'))
            acc = model.load_state_dict(checkpoint['state_dict'], strict=True)
            logging.info(f'missing keys of models: {acc.missing_keys}')
            del checkpoint
        else:
            raise Exception(f"No checkpoint found at '{args.resume}' to be resumed")

    # 模型信息
    image_height, image_width = args.image_size
    logging.info(f'Model {args.arch} input size: ({image_height}, {image_width})')
    utils.summary(size=(image_height, image_width), channel=3, model=model)

    # 模型转换:转为 torch.jit.script
    if args.jit:
        if not args.resume:
            raise Exception('Option --resume must specified!')
        applications.convert_to_jit(model, args=args)
        return

    if args.criterion == 'softmax':
        criterion = criterions.HybridCELoss(args=args)  # 混合策略多分类
    elif args.criterion == 'bce':
        criterion = criterions.HybridBCELoss(args=args)  # 混合策略多标签二分类
    else:
        raise NotImplementedError(f'Not loss function {args.criterion}')

    if args.cuda:
        if args.distributed and args.sync_bn:
            model = apex.parallel.convert_syncbn_model(model)
        torch.cuda.set_device(args.gpu)
        model.cuda(args.gpu)
        criterion = criterion.cuda(args.gpu)

    if args.knowledge in ('train', 'test', 'val'):
        torch.set_flush_denormal(True)
        distill_loader = dataloader.load(args, name=args.knowledge)
        applications.distill(distill_loader, model, criterion, args, is_confuse_matrix=True)
        return

    if args.make_curriculum in ('train', 'test', 'val'):
        torch.set_flush_denormal(True)
        curriculum_loader = dataloader.load(args, name=args.make_curriculum)
        applications.make_curriculum(curriculum_loader, model, criterion, args, is_confuse_matrix=True)
        return

    if args.visual_data in ('train', 'test', 'val'):
        torch.set_flush_denormal(True)
        test_loader = dataloader.load(args, name=args.visual_data)
        applications.Visualize.visualize(test_loader, model, args)
        return

    # 优化器
    opt_set = {
        'sgd': partial(torch.optim.SGD, momentum=args.momentum),
        'adam': torch.optim.Adam, 'adamw': AdamW,
        'radam': RAdam, 'ranger': Ranger, 'lookaheadadam': LookaheadAdam,
        'ralamb': Ralamb, 'rangerlars': RangerLars,
        'novograd': Novograd,
    }
    optimizer = opt_set[args.opt](model.parameters(), lr=args.lr)  # weight decay转移到train那里了
    # 随机均值平均优化器
    # from optim.swa import SWA
    # optimizer = SWA(optimizer, swa_start=10, swa_freq=5, swa_lr=0.05)

    # 混合精度训练
    if args.cuda:
        model, optimizer = amp.initialize(model, optimizer, opt_level="O1")

    if args.distributed:
        model = apex.parallel.DistributedDataParallel(model)
    else:
        model = torch.nn.DataParallel(model)

    if args.train:
        train_loader = dataloader.load(args, 'train')
        val_loader = dataloader.load(args, 'val')
        scheduler = LambdaLR(optimizer,
                             lambda epoch: adjust_learning_rate(epoch, args=args))
        applications.train(train_loader, val_loader, model, criterion, optimizer, scheduler, args)
        args.evaluate = True

    if args.evaluate:
        torch.set_flush_denormal(True)
        test_loader = dataloader.load(args, name='test')
        acc, loss, paths_targets_preds_probs = applications.test(test_loader, model,
                                                                 criterion, args, is_confuse_matrix=True)
        logging.info(f'Evaluation: * Acc@1 {acc:.3f} and loss {loss:.3f}.')
        logging.info(f'Evaluation Result:\n')
        for path, target, pred, prob in paths_targets_preds_probs:
            logging.info(path + ' ' + str(target) + ' ' + str(pred) + ' ' + ','.join([f'{num:.2f}' for num in prob]))
        logging.info('Evaluation Over~')
g_loss = g_loss_a2b + g_loss_b2a + cyc_loss_a * 10.0 + cyc_loss_b * 10.0

d_loss_a_real = tf.losses.mean_squared_error(a_logit, tf.ones_like(a_logit))
d_loss_b2a_sample = tf.losses.mean_squared_error(
    b2a_sample_logit, tf.zeros_like(b2a_sample_logit))
d_loss_a = d_loss_a_real + d_loss_b2a_sample

d_loss_b_real = tf.losses.mean_squared_error(b_logit, tf.ones_like(b_logit))
d_loss_a2b_sample = tf.losses.mean_squared_error(
    a2b_sample_logit, tf.zeros_like(a2b_sample_logit))
d_loss_b = d_loss_b_real + d_loss_a2b_sample

# summaries
g_summary = utils.summary({
    g_loss_a2b: 'g_loss_a2b',
    g_loss_b2a: 'g_loss_b2a',
    cyc_loss_a: 'cyc_loss_a',
    cyc_loss_b: 'cyc_loss_b'
})
d_summary_a = utils.summary({d_loss_a: 'd_loss_a'})
d_summary_b = utils.summary({d_loss_b: 'd_loss_b'})

# optim
t_var = tf.trainable_variables()
d_a_var = [var for var in t_var if 'a_discriminator' in var.name]
d_b_var = [var for var in t_var if 'b_discriminator' in var.name]
g_var = [
    var for var in t_var
    if 'a2b_generator' in var.name or 'b2a_generator' in var.name
]

d_a_train_op = tf.train.AdamOptimizer(lr, beta1=0.5).minimize(d_loss_a,
예제 #20
0
    d_loss = -wd
    g_loss = -tf.reduce_mean(f_logit)

    # otpims
    d_var = utils.trainable_variables('discriminator')
    g_var = utils.trainable_variables('generator')
    d_step_ = tf.train.RMSPropOptimizer(learning_rate=lr).minimize(
        d_loss, var_list=d_var)
    with tf.control_dependencies([d_step_]):
        d_step = tf.group(*(tf.assign(var, tf.clip_by_value(var, -clip, clip))
                            for var in d_var))
    g_step = tf.train.RMSPropOptimizer(learning_rate=lr).minimize(
        g_loss, var_list=g_var)

    # summaries
    d_summary = utils.summary({wd: 'wd'})
    g_summary = utils.summary({g_loss: 'g_loss'})

    # sample
    f_sample = generator(z, training=False)
""" train """
''' init '''
# session
sess = utils.session()
# iteration counter
it_cnt, update_cnt = utils.counter()
# saver
saver = tf.train.Saver(max_to_keep=5)
# summary writer
summary_writer = tf.summary.FileWriter('./summaries/celeba_wgan', sess.graph)
''' initialization '''
예제 #21
0
        num_workers=train_args.num_workers,
        #   sampler=train_sampler,
        pin_memory=False,
    )
    valid_loader = DataLoader(
        valid_set,
        batch_size=train_args.batch_size,
        shuffle=False,
        num_workers=train_args.num_workers,
        #   sampler=valid_sampler,
        pin_memory=False,
    )

    # model summary
    data, _, _ = train_set[0]
    summary(
        model,
        tuple(data.shape),
        batch_size=train_args.batch_size,
        device='cuda',
        model_name=train_args.model_name.upper(),
    )

    # training
    train(model, train_loader, valid_loader, optimizer, criterion, train_args)

    # config
    model_config(train_args,
                 save=False)  # print model configuration after training

    postprocessor(train_args.save_path)
예제 #22
0
    def __init__(self, config):
        super(Trainer, self).__init__(config)
        # Datamanager
        self.datamanager, params_data = build_datamanager(
            config['type'], config['data'])

        # model
        self.model, params_model = build_model(
            config,
            num_classes=len(self.datamanager.datasource.get_attribute()),
            device=self.device)

        # losses
        pos_ratio = torch.tensor(
            self.datamanager.datasource.get_weight('train'))
        self.criterion, params_loss = build_losses(
            config,
            pos_ratio=pos_ratio,
            num_attribute=len(self.datamanager.datasource.get_attribute()))

        # optimizer
        self.optimizer, params_optimizers = build_optimizers(
            config, self.model)

        # learing rate scheduler
        self.lr_scheduler, params_lr_scheduler = build_lr_scheduler(
            config, self.optimizer)

        # callbacks for freeze backbone
        if config['freeze']['enable']:
            self.freeze = FreezeLayers(self.model, config['freeze']['layers'],
                                       config['freeze']['epochs'])
        else:
            self.freeze = None

        # list of metrics
        self.lst_metrics = ['mA', 'accuracy', 'f1_score']

        # track metric
        self.train_metrics = MetricTracker('loss', *self.lst_metrics)
        self.valid_metrics = MetricTracker('loss', *self.lst_metrics)

        # step log loss and accuracy
        self.log_step = (len(self.datamanager.get_dataloader('train')) // 5,
                         len(self.datamanager.get_dataloader('val')) // 5)
        self.log_step = (self.log_step[0] if self.log_step[0] > 0 else 1,
                         self.log_step[1] if self.log_step[1] > 0 else 1)

        # best accuracy and loss
        self.best_loss = None
        self.best_metrics = dict()
        for x in self.lst_metrics:
            self.best_metrics[x] = None

        # print config
        self._print_config(
            params_data=params_data,
            params_model=params_model,
            params_loss=params_loss,
            params_optimizers=params_optimizers,
            params_lr_scheduler=params_lr_scheduler,
            freeze_layers=False if self.freeze == None else True,
            clip_grad_norm_=self.config['clip_grad_norm_']['enable'])

        # send model to device
        self.model.to(self.device)
        self.criterion.to(self.device)

        # summary model
        summary(model=self.model,
                input_data=torch.zeros((self.datamanager.get_batch_size(), 3,
                                        self.datamanager.get_image_size()[0],
                                        self.datamanager.get_image_size()[1])),
                batch_dim=None,
                device='cuda' if self.use_gpu else 'cpu',
                print_func=self.logger.info,
                print_step=False)

        # resume model from last checkpoint
        if config['resume'] != '':
            self._resume_checkpoint(config['resume'], config['only_model'])
예제 #23
0
from Person import Person
import utils

persons = utils.loadPersons('data/persons.json')

names = list(map(lambda person : person.name, persons))
bill = utils.loadBill('data/bill.json', names)
print('Bill')
for b in bill:
    b.show()

utils.calculatePayMent(persons, bill)
utils.optimize(persons)

print('')
print('Payments')
for person in persons:
    person.show()

print('')
utils.check(persons)
utils.summary(bill, persons)
예제 #24
0
    def __init__(self, args):
        self.args = args

        filehandler = logging.FileHandler(args.logging_file)
        streamhandler = logging.StreamHandler()

        self.logger = logging.getLogger('')
        self.logger.setLevel(logging.INFO)
        self.logger.addHandler(filehandler)
        self.logger.addHandler(streamhandler)

        self.logger.info(args)


        # image transform
        input_transform = transforms.Compose([
            transforms.ToTensor(),
            transforms.Normalize([.485, .456, .406], [.229, .224, .225]),  # Default mean and std
        ])

        ################################# dataset and dataloader #################################
        if platform.system() == "Darwin":
            data_root = os.path.join('~', 'Nutstore Files', 'Dataset')  # Mac
        elif platform.system() == "Linux":
            data_root = os.path.join('~', 'datasets')  # Laplace or HPC
            if args.colab:
                data_root = '/content/datasets'  # Colab
        else:
            raise ValueError('Notice Dataset Path')

        data_kwargs = {'base_size': args.base_size, 'transform': input_transform,
                       'crop_size': args.crop_size, 'root': data_root,
                       'base_dir': args.dataset}
        trainset = IceContrast(split=args.train_split, mode='train',   **data_kwargs)
        valset = IceContrast(split=args.val_split, mode='testval', **data_kwargs)
        self.train_data = gluon.data.DataLoader(trainset, args.batch_size, shuffle=True,
                                                last_batch='rollover', num_workers=args.workers)
        self.eval_data = gluon.data.DataLoader(valset, args.test_batch_size,
                                               last_batch='rollover', num_workers=args.workers)

        layers = [args.blocks] * 3
        channels = [x * args.channel_times for x in [8, 16, 32, 64]]
        if args.model == 'ResNetFPN':
            model = ASKCResNetFPN(layers=layers, channels=channels, fuse_mode=args.fuse_mode,
                                  tiny=args.tiny, classes=trainset.NUM_CLASS)
        elif args.model == 'ResUNet':
            model = ASKCResUNet(layers=layers, channels=channels, fuse_mode=args.fuse_mode,
                                tiny=args.tiny, classes=trainset.NUM_CLASS)
        print("layers: ", layers)
        print("channels: ", channels)
        print("fuse_mode: ", args.fuse_mode)
        print("tiny: ", args.tiny)
        print("classes: ", trainset.NUM_CLASS)

        if args.host == 'xxx':
            self.host_name = socket.gethostname()  # automatic
        else:
            self.host_name = args.host             # Puma needs to be specified
        self.save_prefix = '_'.join([args.model, args.fuse_mode, args.dataset, self.host_name,
                            'GPU', args.gpus])

        model.cast(args.dtype)
        # self.logger.info(model)

        # resume checkpoint if needed
        if args.resume is not None:
            if os.path.isfile(args.resume):
                model.load_parameters(args.resume, ctx=args.ctx)
            else:
                raise RuntimeError("=> no checkpoint found at '{}'".format(args.resume))
        else:
            model.initialize(init=init.MSRAPrelu(), ctx=args.ctx, force_reinit=True)
            print("Model Initializing")
            print("args.ctx: ", args.ctx)

        self.net = model
        if args.summary:
            summary(self.net, mx.nd.zeros((1, 3, args.crop_size, args.crop_size), ctx=args.ctx[0]))
            sys.exit()

        # create criterion
        self.criterion = SoftIoULoss()

        # optimizer and lr scheduling
        self.lr_scheduler = LRSequential([
                LRScheduler('linear', base_lr=0, target_lr=args.lr,
                            nepochs=args.warmup_epochs, iters_per_epoch=len(self.train_data)),
                LRScheduler(mode='poly', base_lr=args.lr,
                            nepochs=args.epochs-args.warmup_epochs,
                            iters_per_epoch=len(self.train_data),
                            power=0.9)
            ])
        kv = mx.kv.create(args.kvstore)

        if args.optimizer == 'sgd':
            optimizer_params = {'lr_scheduler': self.lr_scheduler,
                                'wd': args.weight_decay,
                                'momentum': args.momentum,
                                'learning_rate': args.lr}
        elif args.optimizer == 'adam':
            optimizer_params = {'lr_scheduler': self.lr_scheduler,
                                'wd': args.weight_decay,
                                'learning_rate': args.lr}
        elif args.optimizer == 'adagrad':
            optimizer_params = {
                'wd': args.weight_decay,
                'learning_rate': args.lr
            }
        else:
            raise ValueError('Unsupported optimizer {} used'.format(args.optimizer))

        if args.dtype == 'float16':
            optimizer_params['multi_precision'] = True

        if args.no_wd:
            for k, v in self.net.collect_params('.*beta|.*gamma|.*bias').items():
                v.wd_mult = 0.0

        self.optimizer = gluon.Trainer(self.net.collect_params(), args.optimizer,
                                       optimizer_params, kvstore=kv)

        ################################# evaluation metrics #################################

        self.iou_metric = SigmoidMetric(1)
        self.nIoU_metric = SamplewiseSigmoidMetric(1, score_thresh=self.args.score_thresh)
        self.best_iou = 0
        self.best_nIoU = 0
        self.is_best = False
예제 #25
0
# discriminative loss

d_loss_ab_match = tf.losses.mean_squared_error(ab_match_logit,
                                               tf.ones_like(ab_match_logit))

d_loss_ab_unmatch = tf.losses.mean_squared_error(
    ab_unmatch_logit, tf.zeros_like(ab_unmatch_logit))

d_loss_aa2b_pair = tf.losses.mean_squared_error(
    a2b_sample_logit, tf.zeros_like(a2b_sample_logit))

d_loss_b = d_loss_ab_match + d_loss_ab_unmatch + d_loss_aa2b_pair
# d_loss_b *= 0.1

# summaries
g_summary = utils.summary({g_loss_a2b: 'g_loss_a2b'})
d_summary_b = utils.summary({d_loss_b: 'd_loss_b'})
eval_summary = utils.summary({sl_loss: 'eval_loss'})

# optim
t_var = tf.trainable_variables()
d_b_var = [var for var in t_var if 'b_discriminator' in var.name]
g_var = [
    var for var in t_var
    if 'a2b_generator' in var.name or 'b2a_generator' in var.name
]

d_b_train_op = tf.train.AdamOptimizer(lr, beta1=0.5).minimize(d_loss_b,
                                                              var_list=d_b_var)
g_train_op = tf.train.AdamOptimizer(lr, beta1=0.5).minimize(g_loss,
                                                            var_list=g_var)
예제 #26
0
    # losses
    d_r_loss = tf.losses.sigmoid_cross_entropy(tf.ones_like(r_logit), r_logit)
    d_f_loss = tf.losses.sigmoid_cross_entropy(tf.zeros_like(f_logit), f_logit)
    d_loss = (d_r_loss + d_f_loss) / 2.0
    g_loss = tf.losses.sigmoid_cross_entropy(tf.ones_like(f_logit), f_logit)

    # otpims
    d_var = utils.trainable_variables('discriminator')
    g_var = utils.trainable_variables('generator')
    d_step = tf.train.AdamOptimizer(learning_rate=lr,
                                    beta1=0.3).minimize(d_loss, var_list=d_var)
    g_step = tf.train.AdamOptimizer(learning_rate=lr,
                                    beta1=0.3).minimize(g_loss, var_list=g_var)

    # summaries
    d_summary = utils.summary({d_loss: 'd_loss'})
    g_summary = utils.summary({g_loss: 'g_loss'})

    # sample
    f_sample = generator(z, training=False)
""" train """
''' init '''
# session
sess = utils.session()
# iteration counter
it_cnt, update_cnt = utils.counter()
# saver
saver = tf.train.Saver(max_to_keep=5)
# summary writer
summary_writer = tf.summary.FileWriter('./summaries/cartoon_dcgan', sess.graph)
''' initialization '''
예제 #27
0
    d_loss = d_r_loss + d_f_loss + 10.0 * gp
    g_loss = tf.losses.sigmoid_cross_entropy(tf.ones_like(f_logit), f_logit)

    # otpims
    d_var = utils.trainable_variables('discriminator')
    g_var = utils.trainable_variables('generator')
    d_step = tf.train.AdamOptimizer(learning_rate=lr,
                                    beta1=0.5).minimize(d_loss, var_list=d_var)
    g_step = tf.train.AdamOptimizer(learning_rate=lr,
                                    beta1=0.5).minimize(g_loss, var_list=g_var)

    # summaries
    d_summary = utils.summary({
        d_r_loss: 'd_r_loss',
        d_f_loss: 'd_f_loss',
        gp: 'gp'
    })
    g_summary = utils.summary({g_loss: 'g_loss'})

    # sample
    f_sample = generator(z, training=False)
""" train """
''' init '''
# session
sess = utils.session()
# iteration counter
it_cnt, update_cnt = utils.counter()
# saver
saver = tf.train.Saver(max_to_keep=5)
# summary writer
              '-------------------------------------------')
        df_dataset[col] = df_dataset[col].astype(str)
        vect_val = df_dataset[col].drop(np.where(df_dataset[col] == 'nan')[0])
        vect_val = vect_val.astype(float)

        # Necessary informations:
        kde = False
        bins = 30
        nb_points = float(len(vect_val))
        min_val = vect_val.min()
        max_val = vect_val.max()
        nb_miss = float(len(df_dataset[col].tolist()) - nb_points)
        rate = round(100 * nb_miss / len(df_dataset[col].tolist()), 2)

        if len(vect_val.tolist()) != 0:
            Low_tuck, Upp_tuck, mean, std = utils.summary(vect_val.tolist())
        else:
            Low_tuck = 'nan'
            Upp_tuck = 'nan'
            mean = 'nan'
            std = 'nan'

        print('|nb_points   : ', nb_points)
        print('|rate        : ', rate)

        # Write data in a file:
        file1 = open('../infoDataset/details/' + col + '/statistics.txt', "w")
        L = [
            "Number of datas    : " + str(nb_points) + "\n",
            "Min                : " + str(min_val) + "\n",
            "Max                : " + str(max_val) + "\n",
예제 #29
0
def train(logdir, model_name, iterations, checkpoint_interval, batch_size,
          temperature, hidden_size, n_layers, rnn_cell, learning_rate,
          learning_rate_decay_steps, learning_rate_decay_rate):

    device = torch.device(
        'cuda:0') if torch.cuda.is_available() else torch.device('cpu')

    os.makedirs(logdir, exist_ok=True)

    dataset = dataloader.JazzDataset()
    loader = DataLoader(dataset, batch_size, shuffle=True)

    model_class = getattr(rnn, model_name)
    model = model_class(hidden_size, rnn_cell, n_layers)
    optimizer = torch.optim.Adam(model.parameters(), learning_rate)

    criterion = nn.NLLLoss()
    scheduler = StepLR(optimizer,
                       step_size=learning_rate_decay_steps,
                       gamma=learning_rate_decay_rate)

    model = model.to(device)
    summary(model)

    loop = tqdm(range(0, iterations + 1), desc='Training', unit='Steps')
    for i, batch in zip(loop, cycle(loader)):
        scheduler.step()
        optimizer.zero_grad()

        batch = batch.to(device)  # shape of (batch_size, n_steps)

        c_0, h_0 = model.init_hidden(batch.shape[0])
        c_0 = c_0.to(device)
        h_0 = h_0.to(device)

        # TODO: Fill in below
        init_hidden = None

        hidden = init_hidden
        loss = 0.0

        for step in range(batch.shape[1] - 1):  # n_steps - 1
            # TODO: Fill in below
            # Forward model.
            # x=semgent of batch, corresponds to step,
            # hidden=state of hidden nodes of last/or initial step
            pred, hidden = model(x=None, hidden=None)

            # TODO: Fill in below
            # Hint: use criterion. See torch.nn.NLLLoss() function
            loss += None

        loss.backward()
        optimizer.step()

        # print loss
        loop.set_postfix_str("loss: {:.3f}".format(loss))

        # save model
        if i % checkpoint_interval == 0:
            torch.save(
                {
                    'model_state_dict':
                    model.state_dict(),
                    'optimizer_state_dict':
                    optimizer.state_dict(),
                    'model_name':
                    model_name,
                    'hparams':
                    dict(hidden_size=hidden_size,
                         n_layers=n_layers,
                         rnn_cell=rnn_cell)
                }, os.path.join(logdir, 'model-{:d}.pt'.format(i)))
예제 #30
0
def train():
    epoch = 200
    batch_size = 1
    lr = 0.0002
    crop_size = 4
    tar_db_a = "cameron_images.tgz"
    tar_db_b = "teresa_images.tgz"
    db_a_i = importer_tar.Importer(tar_db_a)
    db_b_i = importer_tar.Importer(tar_db_b)
    image_a_names = db_a_i.get_sorted_image_name()
    image_b_names = db_b_i.get_sorted_image_name()
    train_a_size = int(len(image_a_names) * 0.8)
    train_b_size = int(len(image_b_names) * 0.8)

    image_a_train_names = image_a_names[0:train_a_size]
    image_b_train_names = image_b_names[0:train_b_size]

    image_a_test_names = image_a_names[train_a_size:]
    image_b_test_names = image_b_names[train_b_size:]

    print("A train size:{},test size:{}".format(len(image_a_train_names),
                                                len(image_a_test_names)))
    print("B train size:{},test size:{}".format(len(image_b_train_names),
                                                len(image_b_test_names)))
    """ graph """
    # models
    generator_a2b = partial(models.generator, scope='a2b')
    generator_b2a = partial(models.generator, scope='b2a')
    discriminator_a = partial(models.discriminator, scope='a')
    discriminator_b = partial(models.discriminator, scope='b')

    #print("Discriminator shape:{}".format())

    # operations
    a_real = tf.placeholder(tf.float32, shape=[None, crop_size, crop_size, 3])
    b_real = tf.placeholder(tf.float32, shape=[None, crop_size, crop_size, 3])
    a2b_sample = tf.placeholder(tf.float32,
                                shape=[None, crop_size, crop_size, 3])
    b2a_sample = tf.placeholder(tf.float32,
                                shape=[None, crop_size, crop_size, 3])

    a2b = generator_a2b(a_real)
    b2a = generator_b2a(b_real)
    b2a2b = generator_a2b(b2a)
    a2b2a = generator_b2a(a2b)

    a_logit = discriminator_a(a_real)
    b2a_logit = discriminator_a(b2a)
    b2a_sample_logit = discriminator_a(b2a_sample)
    b_logit = discriminator_b(b_real)
    a2b_logit = discriminator_b(a2b)
    a2b_sample_logit = discriminator_b(a2b_sample)

    # losses
    #g_loss_a2b = tf.losses.mean_squared_error(a2b_logit, tf.ones_like(a2b_logit))
    #g_loss_b2a = tf.losses.mean_squared_error(b2a_logit, tf.ones_like(b2a_logit))

    g_loss_a2b = -tf.reduce_mean(a2b_logit)
    g_loss_b2a = -tf.reduce_mean(b22_logit)

    cyc_loss_a = tf.losses.absolute_difference(a_real, a2b2a)
    cyc_loss_b = tf.losses.absolute_difference(b_real, b2a2b)
    g_loss = g_loss_a2b + g_loss_b2a + cyc_loss_a * 10.0 + cyc_loss_b * 10.0

    #    d_loss_a_real = tf.losses.mean_squared_error(a_logit, tf.ones_like(a_logit))
    #    d_loss_b2a_sample = tf.losses.mean_squared_error(b2a_sample_logit, tf.zeros_like(b2a_sample_logit))
    #    d_loss_a = d_loss_a_real + d_loss_b2a_sample
    #
    wd_a = tf.reduce_mean(a_logit) - tf.reduce_mean(b2a_logit)
    wd_b = tf.reduce_mean(b_logit) - tf.reduce_mean(a2b_logit)

    gp_a = gradient_penalty(a_real, b2a, discriminator_a)
    gp_b = gradient_penalty(b_real, a2b, discriminator_b)

    d_loss_a = -wd_a + 10.0 * gp_a

    d_loss_b = -wd_b + 10.0 * gp_b

    #    d_loss_b_real = tf.losses.mean_squared_error(b_logit, tf.ones_like(b_logit))
    #    d_loss_a2b_sample = tf.losses.mean_squared_error(a2b_sample_logit, tf.zeros_like(a2b_sample_logit))
    #    d_loss_b = d_loss_b_real + d_loss_a2b_sample

    # summaries
    g_summary = utils.summary({
        g_loss_a2b: 'g_loss_a2b',
        g_loss_b2a: 'g_loss_b2a',
        cyc_loss_a: 'cyc_loss_a',
        cyc_loss_b: 'cyc_loss_b'
    })
    d_summary_a = utils.summary({d_loss_a: 'd_loss_a'})
    d_summary_b = utils.summary({d_loss_b: 'd_loss_b'})

    # optim
    t_var = tf.trainable_variables()
    d_a_var = [var for var in t_var if 'a_discriminator' in var.name]
    d_b_var = [var for var in t_var if 'b_discriminator' in var.name]
    g_var = [
        var for var in t_var
        if 'a2b_generator' in var.name or 'b2a_generator' in var.name
    ]

    d_a_train_op = tf.train.AdamOptimizer(lr,
                                          beta1=0.5).minimize(d_loss_a,
                                                              var_list=d_a_var)
    d_b_train_op = tf.train.AdamOptimizer(lr,
                                          beta1=0.5).minimize(d_loss_b,
                                                              var_list=d_b_var)
    g_train_op = tf.train.AdamOptimizer(lr, beta1=0.5).minimize(g_loss,
                                                                var_list=g_var)
    """ train """
    ''' init '''
    # session
    config = tf.ConfigProto(allow_soft_placement=True)
    config.gpu_options.allow_growth = True
    sess = tf.Session(config=config)

    # counter
    it_cnt, update_cnt = utils.counter()
    ''' summary '''
    summary_writer = tf.summary.FileWriter('./outputs/summaries/', sess.graph)
    ''' saver '''
    saver = tf.train.Saver(max_to_keep=5)
    ''' restore '''
    ckpt_dir = './outputs/checkpoints/'
    utils.mkdir(ckpt_dir)
    try:
        utils.load_checkpoint(ckpt_dir, sess)
    except:
        sess.run(tf.global_variables_initializer())
    '''train'''
    try:
        batch_epoch = min(train_a_size, train_b_size) // batch_size
        max_it = epoch * batch_epoch
        for it in range(sess.run(it_cnt), max_it):
            sess.run(update_cnt)
            epoch = it // batch_epoch
            it_epoch = it % batch_epoch + 1

            # prepare data
            a_real_ipt = db_a_i.get_image(image_a_train_names[it_epoch])
            a_real_ipt = cv2.resize(a_real_ipt, (crop_size, crop_size),
                                    interpolation=cv2.INTER_CUBIC)

            b_real_ipt = db_b_i.get_image(image_b_train_names[it_epoch])
            b_real_ipt = cv2.resize(b_real_ipt, (crop_size, crop_size),
                                    interpolation=cv2.INTER_CUBIC)

            a_real_ipt = [a_real_ipt]
            b_real_ipt = [b_real_ipt]
            a2b_opt, b2a_opt = sess.run([a2b, b2a],
                                        feed_dict={
                                            a_real: a_real_ipt,
                                            b_real: b_real_ipt
                                        })

            a2b_sample_ipt = a2b_opt
            b2a_sample_ipt = b2a_opt

            # train G
            g_summary_opt, _ = sess.run([g_summary, g_train_op],
                                        feed_dict={
                                            a_real: a_real_ipt,
                                            b_real: b_real_ipt
                                        })
            summary_writer.add_summary(g_summary_opt, it)
            # train D_b
            d_summary_b_opt, _ = sess.run([d_summary_b, d_b_train_op],
                                          feed_dict={
                                              b_real: b_real_ipt,
                                              a2b_sample: a2b_sample_ipt
                                          })
            summary_writer.add_summary(d_summary_b_opt, it)
            # train D_a
            d_summary_a_opt, _ = sess.run([d_summary_a, d_a_train_op],
                                          feed_dict={
                                              a_real: a_real_ipt,
                                              b2a_sample: b2a_sample_ipt
                                          })
            summary_writer.add_summary(d_summary_a_opt, it)

            # display
            if it % 1 == 0:
                print("Epoch: (%3d) (%5d/%5d)" %
                      (epoch, it_epoch, batch_epoch))

            # save
            if (it + 1) % 1000 == 0:
                save_path = saver.save(
                    sess, '%s/Epoch_(%d)_(%dof%d).ckpt' %
                    (ckpt_dir, epoch, it_epoch, batch_epoch))
                print('Model saved in file: % s' % save_path)

            # sample


#            if (it + 1) % 100 == 0:
#                a_real_ipt = a_test_pool.batch()
#                b_real_ipt = b_test_pool.batch()
#                [a2b_opt, a2b2a_opt, b2a_opt, b2a2b_opt] = sess.run([a2b, a2b2a, b2a, b2a2b], feed_dict={a_real: a_real_ipt, b_real: b_real_ipt})
#                sample_opt = np.concatenate((a_real_ipt, a2b_opt, a2b2a_opt, b_real_ipt, b2a_opt, b2a2b_opt), axis=0)
#
#                save_dir = './outputs/sample_images_while_training/' + dataset
#                utils.mkdir(save_dir)
#                im.imwrite(im.immerge(sample_opt, 2, 3), '%s/Epoch_(%d)_(%dof%d).jpg' % (save_dir, epoch, it_epoch, batch_epoch))
    except:
        save_path = saver.save(
            sess, '%s/Epoch_(%d)_(%dof%d).ckpt' %
            (ckpt_dir, epoch, it_epoch, batch_epoch))
        print('Model saved in file: % s' % save_path)
        sess.close()
        raise
예제 #31
0
def train(logdir, model_name, iterations, checkpoint_interval, batch_size,
          temperature, hidden_size, n_layers, rnn_cell, learning_rate,
          learning_rate_decay_steps, learning_rate_decay_rate):

    device = torch.device(
        'cuda:0') if torch.cuda.is_available() else torch.device('cpu')

    os.makedirs(logdir, exist_ok=True)

    dataset = dataloader.JazzDataset()
    loader = DataLoader(dataset, batch_size, shuffle=True)

    model_class = getattr(rnn, model_name)
    model = model_class(hidden_size, rnn_cell, n_layers)
    optimizer = torch.optim.Adam(model.parameters(), learning_rate)

    criterion = nn.NLLLoss()
    scheduler = StepLR(optimizer,
                       step_size=learning_rate_decay_steps,
                       gamma=learning_rate_decay_rate)

    model = model.to(device)
    summary(model)

    loop = tqdm(range(0, iterations + 1), desc='Training', unit='Steps')
    for i, batch in zip(loop, cycle(loader)):
        scheduler.step()
        optimizer.zero_grad()

        batch = batch.to(device)  # shape of (batch_size, sequence_length)

        c_0, h_0 = model.init_hidden(batch.shape[0])
        c_0 = c_0.to(device)
        h_0 = h_0.to(device)

        # TODO: Fill in below
        init_hidden = (c_0, h_0)

        hidden = init_hidden
        loss = 0.0

        for step in range(batch.shape[1] - 1):  # sequence_length - 1
            # TODO: Fill in below
            # run a step of training model.
            # x = semgent of batch, corresponds to current step. shape of (batch_size, 1)
            x = [batch[i][step] for i in range(batch.shape[0])]
            x = torch.tensor(x, dtype=torch.long)
            x = x.to(device)
            pred, hidden = model(x=x, hidden=hidden)

            # TODO: Fill in below
            # calcuate loss between prediction and the values of next step.
            # Hint: use criterion. See torch.nn.NLLLoss() function

            x1 = [batch[i][step + 1] for i in range(batch.shape[0])]
            x1 = torch.tensor(x1, dtype=torch.long)
            x1 = x1.to(device)
            loss += criterion(pred, x1)

        loss.backward()
        optimizer.step()

        # print loss
        loop.set_postfix_str("loss: {:.3f}".format(loss))

        # save model
        if i % checkpoint_interval == 0:
            torch.save(
                {
                    'model_state_dict':
                    model.state_dict(),
                    'optimizer_state_dict':
                    optimizer.state_dict(),
                    'model_name':
                    model_name,
                    'hparams':
                    dict(hidden_size=hidden_size,
                         n_layers=n_layers,
                         rnn_cell=rnn_cell)
                }, os.path.join(logdir, 'model-{:d}.pt'.format(i)))
예제 #32
0
from utils import read_pdf, clean_stem_corpus, summary, save_kesimpulan, tfidf_bobot
from nltk.tokenize import sent_tokenize
import time

print('Starting.....')
since = time.time()
PATH = '39775-697-80327-1-10-20180521.pdf'

content = read_pdf(PATH, semua_halaman=False, halaman=1)
corpus = sent_tokenize(content)
print('ukuran corpus', len(corpus))

print('\ncleaning and stemming sentences....')
kalimat_stem = clean_stem_corpus(corpus)
words_weights = tfidf_bobot(kalimat_stem)
print('\nSummarizing.....')
kesimpulan = summary(corpus, words_weights, n_kalimat_summary=5)

save_kesimpulan(kesimpulan, 'kesimpulan.doc')

print(f"\nKesimpulan:\n{kesimpulan}")
print("Waktu: {:.3f} minutes".format((time.time() - since) / 60))
예제 #33
0
    def train(epochs, ctx):
        if isinstance(ctx, mx.Context):
            ctx = [ctx]
        net.initialize(mx.init.Xavier(), ctx=ctx)

        if opt.summary:
            summary(net, mx.nd.zeros((1, 3, 32, 32), ctx=ctx[0]))
            sys.exit()

        if opt.dataset == 'cifar10':
            train_data = gluon.data.DataLoader(
                gluon.data.vision.CIFAR10(train=True).transform_first(transform_train),
                batch_size=batch_size, shuffle=True, last_batch='discard', num_workers=num_workers)
            val_data = gluon.data.DataLoader(
                gluon.data.vision.CIFAR10(train=False).transform_first(transform_test),
                batch_size=batch_size, shuffle=False, num_workers=num_workers)
        elif opt.dataset == 'cifar100':
            train_data = gluon.data.DataLoader(
                gluon.data.vision.CIFAR100(train=True).transform_first(transform_train),
                batch_size=batch_size, shuffle=True, last_batch='discard', num_workers=num_workers)
            val_data = gluon.data.DataLoader(
                gluon.data.vision.CIFAR100(train=False).transform_first(transform_test),
                batch_size=batch_size, shuffle=False, num_workers=num_workers)
        else:
            raise ValueError('Unknown Dataset')

        if opt.no_wd and opt.cosine:
            for k, v in net.collect_params('.*beta|.*gamma|.*bias').items():
                v.wd_mult = 0.0

        trainer = gluon.Trainer(net.collect_params(), optimizer, optimizer_params)

        if opt.label_smoothing or opt.mixup:
            sparse_label_loss = False
        else:
            sparse_label_loss = True

        metric = mx.metric.Accuracy()
        train_metric = mx.metric.RMSE()
        loss_fn = gluon.loss.SoftmaxCrossEntropyLoss(sparse_label=sparse_label_loss)
        train_history = TrainingHistory(['training-error', 'validation-error'])

        iteration = 0
        lr_decay_count = 0

        best_val_score = 0

        for epoch in range(epochs):
            tic = time.time()
            train_metric.reset()
            metric.reset()
            train_loss = 0
            num_batch = len(train_data)

            if not opt.cosine:
                if epoch == lr_decay_epoch[lr_decay_count]:
                    trainer.set_learning_rate(trainer.learning_rate * lr_decay)
                    lr_decay_count += 1

            for i, batch in enumerate(train_data):
                data_1 = gluon.utils.split_and_load(batch[0], ctx_list=ctx, batch_axis=0)
                label_1 = gluon.utils.split_and_load(batch[1], ctx_list=ctx, batch_axis=0)

                if opt.mixup:
                    lam = np.random.beta(opt.mixup_alpha, opt.mixup_alpha)
                    if (epoch >= epochs - opt.mixup_off_epoch) or not opt.mixup:
                        lam = 1

                    data = [lam * X + (1 - lam) * X[::-1] for X in data_1]

                    if opt.label_smoothing:
                        eta = 0.1
                    else:
                        eta = 0.0
                    label = mixup_transform(label_1, classes, lam, eta)

                elif opt.label_smoothing:
                    hard_label = label_1
                    label = smooth(label_1, classes)

                with ag.record():
                    output = [net(X) for X in data]
                    loss = [loss_fn(yhat, y) for yhat, y in zip(output, label)]
                for l in loss:
                    l.backward()
                trainer.step(batch_size)
                train_loss += sum([l.sum().asscalar() for l in loss])

                if opt.mixup:
                    output_softmax = [nd.SoftmaxActivation(out) for out in output]
                    train_metric.update(label, output_softmax)
                else:
                    if opt.label_smoothing:
                        train_metric.update(hard_label, output)
                    else:
                        train_metric.update(label, output)

                name, acc = train_metric.get()
                iteration += 1

            train_loss /= batch_size * num_batch
            name, acc = train_metric.get()
            name, val_acc = test(ctx, val_data)
            train_history.update([acc, 1 - val_acc])
            train_history.plot(save_path='%s/%s_history.png' % (plot_name, model_name))

            if val_acc > best_val_score:
                best_val_score = val_acc
                net.save_parameters('%s/%.4f-%s-best.params' %
                                    (save_dir, best_val_score, model_name))

            name, val_acc = test(ctx, val_data)
            logging.info('[Epoch %d] train=%f val=%f loss=%f lr: %f time: %f' %
                         (epoch, acc, val_acc, train_loss, trainer.learning_rate,
                          time.time() - tic))

        host_name = socket.gethostname()
        with open(opt.dataset + '_' + host_name + '_GPU_' + opt.gpus + '_best_Acc.log', 'a') as f:
            f.write('best Acc: {:.4f}\n'.format(best_val_score))
        print("best_val_score: ", best_val_score)