Esempio n. 1
0
def trainModel(model,
               EPOCH,
               train_data,
               test_data,
               criterion,
               optimizer,
               RESULTS_PATH,
               scheduler=None,
               MODEL_PATH=None):
    total = int(ceil(len(train_data) / BATCH_SIZE))
    #     print(total)
    for epoch in range(EPOCH):
        losses = []
        model.train()
        for i, batch in enumerate(getBatch(train_data, BATCH_SIZE)):
            view_bar(i, total, epoch + 1)
            sents, target = list(zip(*batch))

            inputs = torch.cat([prepare_seq(sent, word2idx) for sent in sents])
            targets = torch.cat([prepare_tag(tag, tag2idx) for tag in target])
            # print(inputs.shape, targets.shape)
            model.zero_grad()
            preds = model(inputs, is_training=True)

            loss = criterion(preds, targets)
            losses.append(loss.data.tolist())
            loss.backward()
            optimizer.step()
        if scheduler:
            scheduler.step()

        print("\t mean_loss : %0.2f" % np.mean(losses), end='')
        losses = []
        testModel(test_data)
Esempio n. 2
0
def trainModel(model, train_data, valid_data, BATCH_SIZE, SEQ_LENGTH, EPOCH):

    model.train()
    for epoch in range(EPOCH):
        losses = []
        total = ceil((train_data.size(1) - SEQ_LENGTH) / SEQ_LENGTH)
        hidden = model.hidden_init(BATCH_SIZE)

        for i, batch in enumerate(getBatch(train_data, SEQ_LENGTH)):
            view_bar(i, total, epoch + 1, EPOCH)

            inputs, targets = batch
            hidden = model.detach_hidden(hidden)

            model.zero_grad()
            preds, hidden = model(inputs, hidden, True)

            loss = criterion(preds, targets.reshape(-1))
            losses.append(loss.data)
            loss.backward()

            torch.nn.utils.clip_grad_norm_(model.parameters(), 0.5)
            optimizer.step()

        print("\tmean loss : %0.2f" % np.mean(losses), end='\t')
        losses = []

        testModel(model, valid_data, BATCH_SIZE, SEQ_LENGTH)
Esempio n. 3
0
def testModel(testSet):
    model.eval()
    hidden = model.init_hidden(BATCH_SIZE // 2)
    with torch.no_grad():
        losses = []
        for i, batch in enumerate(getBatch(trainSet, SEQ_LENGTH)):
            inputs, targets = batch

            hidden = model.detach_hidden(hidden)
            model.zero_grad()
            preds, hidden = model(inputs, hidden)
            loss = inputs.size(1) * criterion(preds, targets.view(-1)).data
            losses.append(loss)
        print("\ttest_loss : %0.2f" % np.mean(losses))
        losses = []
Esempio n. 4
0
def testModel(model, test_data, BATCH_SIZE, SEQ_LENGTH):

    model.eval()
    with torch.no_grad():
        hidden = model.hidden_init(BATCH_SIZE)
        criterion = nn.CrossEntropyLoss()
        losses = []
        for i, batch in getBatch(test_data, SEQ_LENGTH):

            inputs, targets = batch
            hidden = model.detach_hidden(hidden)

            model.zero_grad()
            preds, hidden = model(test_data, hidden)

            loss = criterion(preds, targets.reshape(-1))
            losses.append(loss.data)

        print("test loss : %0.2f" % np.mean(losses))
Esempio n. 5
0
def trainModel(train_data):
    losses = []

    for epoch in range(EPOCH):
        for i, batch in enumerate(getBatch(train_data, BATCH_SIZE)):

            inputs, targets, coocs, weights = zip(*batch)

            inputs = torch.cat(inputs)
            targets = torch.cat(targets)
            coocs = torch.cat(coocs)
            weights = torch.cat(weights)

            model.zero_grad()
            loss = model(inputs, targets, coocs, weights)

            loss.backward()
            optimizer.step()

            losses.append(loss.data.tolist())
        if epoch % 10 == 0:
            print("Epoch : %d, mean_loss : %.02f" % (epoch, np.mean(losses)))
            losses = []
Esempio n. 6
0
vocab = creatVocab(corpus)
word2idx, idx2word = word2index(vocab)
train_data = creatTrainData(corpus)

unigram_table = creatUnigramable(corpus, vocab)

losses = []
model = Skipgram(len(word2idx), EMBEDDING_SIZE).to(device)

optimizer = optim.Adam(model.parameters(), lr = learning_rate)
start_time = time.clock()



for epoch in range(EPOCH):
    for i, batch in enumerate(getBatch(train_data, BATCH_SIZE)):

        inputs, targets = zip(*batch)
        inputs = torch.cat(inputs) # B X 1
        targets = torch.cat(targets) # B X 1

        if  negativeSample:
            vocabs = negative_sample(targets, unigram_table, word2idx, negSampleNum)

        else:
            vocabs = prepare_sequence(list(vocab), word2idx).expand(len(inputs), len(vocab))

        model.zero_grad()

        loss = model(inputs, targets, vocabs)