예제 #1
0
파일: train.py 프로젝트: fann1993814/sgns
def train(args):

    data = InputData(args.input, args.min_count, args.sample)
    output_file_name = args.output
    emb_size = len(data.word2id)
    emb_dimension = args.dim
    batch_size = args.mb
    window_size = args.window
    n_negs = args.n_negs
    iteration = args.iters
    initial_lr = args.lr
    use_cuda = args.cuda

    skip_gram_model = SkipGramModel(emb_size, emb_dimension)
    if use_cuda: skip_gram_model = skip_gram_model.cuda()

    optimizer = optim.SGD(skip_gram_model.parameters(), lr=initial_lr)

    pair_count = data.evaluate_pair_count(window_size)
    batch_count = iteration * pair_count / batch_size
    process_bar = tqdm(range(int(batch_count)))

    # skip_gram_model.save_embedding(
    #     data.id2word, 'begin_embedding.txt', use_cuda)

    for i in process_bar:
        pos_pairs = data.get_batch_pairs(batch_size, window_size)
        neg_v = data.get_neg_v_neg_sampling(pos_pairs, n_negs)
        pos_u = [pair[0] for pair in pos_pairs]
        pos_v = [pair[1] for pair in pos_pairs]

        pos_u = torch.LongTensor(pos_u)
        pos_v = torch.LongTensor(pos_v)
        neg_v = torch.LongTensor(neg_v)
        if use_cuda:
            pos_u = pos_u.cuda()
            pos_v = pos_v.cuda()
            neg_v = neg_v.cuda()

        optimizer.zero_grad()
        loss = skip_gram_model(pos_u, pos_v, neg_v)
        loss.backward()
        optimizer.step()

        process_bar.set_description(
            "\rLoss: %0.8f, lr: %0.6f" %
            (loss.item(), optimizer.param_groups[0]['lr']))

        if i * batch_size % 100000 == 0:
            lr = initial_lr * (1.0 - 1.0 * i / batch_count)
            for param_group in optimizer.param_groups:
                param_group['lr'] = lr

    skip_gram_model.save_embedding(data.id2word, output_file_name, use_cuda)
예제 #2
0
def predictFlow(np_arr, model):
    input_data = InputData(np_arr, removePOffset=True, makeDimLess=True)
    input_arr, target_arr = input_data.input, input_data.target 
    input_tr = torch.tensor(input_arr)
    input_batch = input_tr.unsqueeze(0)

    print('Running inference')
    output_batch = model(input_batch.float())
    
    output_tr = output_batch.squeeze(0)
    output_arr = output_tr.detach().numpy()

    print('Saving output')
    saveOutput(output_arr, target_arr)

    return 1
예제 #3
0
        batch_size = 32
        print("*** [Testing] ***")
        print("Dataset: [{}]".format(conf["dataset"]))
        print("test_data_path: [{}]".format(conf["test_data_path"]))

    print("anomaly_class: [{}]".format(anoCls))
    print("batch_size: [{}]".format(batch_size))
    print("model_ticket: [{}]".format(model_ticket))
    print("dropout: [{}]".format(dropout))
    print(
        "===================================================================")

    if is_training == True:

        if conf["dataset"] != "MNIST":
            cb_ob = InputData(conf["train_data_path"], conf["valid_data_path"],
                              conf["anomaly_data_path"], None)
        else:
            cb_ob = InputMNISTData()
            cb_ob.load_input_data(anoCls)

        MODEL = model2(batch_size=batch_size,
                       max_iters=max_iters,
                       repeat=data_repeat,
                       dropout=dropout,
                       model_path=model_path,
                       data_ob=cb_ob,
                       log_dir=root_log_dir,
                       output_dir=output_dir,
                       learnrate_init=learn_rate_init,
                       dataset_name=dataset_name,
                       anoCls=anoCls,