Exemplo n.º 1
0
                               **DATA_LOADER_PARAM)

    # 2. Instantiate a model, loss function, and optimizer
    model = MyCNN(word2vec.vectors).to(dev)
    loss_func = F.cross_entropy
    optimizer = torch.optim.Adadelta(model.parameters(), **OPTIMIZER_PARAM)
    print(
        '* The number of model parameters: ',
        sum([np.prod(p.size()) for p in model.parameters()
             if p.requires_grad]))

    # 3. Train the model
    loss_list = []
    start = time.time()
    for epoch in range(1, EPOCH_MAX + 1):
        train_loss = train(model, train_dloader, loss_func, optimizer)
        valid_loss, valid_accuracy = evaluate(model, tests_dloader, loss_func)

        loss_list.append([epoch, train_loss, valid_loss, valid_accuracy])
        if epoch % EPOCH_LOG == 0:
            elapse = time.time() - start
            print(
                f'{epoch:>6} ({elapse:>6.2f} sec), TrLoss={train_loss:.6f}, VaLoss={valid_loss:.6f}, VaAcc={valid_accuracy:.3f}'
            )
    elapse = time.time() - start

    # 4. Visualize the loss curves
    plt.title(
        f'Training and Validation Losses (time: {elapse:.2f} [sec] @ CUDA: {USE_CUDA})'
    )
    loss_array = np.array(loss_list)
Exemplo n.º 2
0
    data, targets, target_names = load_name_dataset(glob.glob(DATA_PATH))
    data_train = [(text2onehot(data[i], device=dev), torch.LongTensor(
        [targets[i]]).to(dev)) for i in range(len(data))]
    random.shuffle(data_train)

    # 2. Instantiate a model, loss function, and optimizer
    model = MyRNN(len(LETTER_DICT), len(target_names)).to(dev)
    loss_func = nn.CrossEntropyLoss()
    optimizer = torch.optim.SGD(model.parameters(), **OPTIMIZER_PARAM)
    scheduler = torch.optim.lr_scheduler.StepLR(optimizer, **SCHEDULER_PARAM)

    # 3.1. Train the model
    loss_list = []
    start = time.time()
    for epoch in range(1, EPOCH_MAX + 1):
        train_loss = train(model, data_train, loss_func, optimizer)
        scheduler.step()

        loss_list.append([epoch, train_loss])
        if epoch % EPOCH_LOG == 0:
            elapse = (time.time() - start) / 60
            print(f'{epoch:>6} ({elapse:>6.2f} min), TrainLoss={train_loss:.6f}, lr={scheduler.get_last_lr()}')
    elapse = (time.time() - start) / 60

    # 3.2. Save the trained model if necessary
    if SAVE_MODEL:
        torch.save(model.state_dict(), SAVE_MODEL)

    # 4.1. Visualize the loss curves
    plt.title(f'Training Loss (time: {elapse:.2f} [min] @ CUDA: {USE_CUDA})')
    loss_array = np.array(loss_list)
Exemplo n.º 3
0
        x.append(onehot_table[vocab[tokens[1]]])
        y.append(vocab[tokens[0]])
        x.append(onehot_table[vocab[tokens[1]]])
        y.append(vocab[tokens[2]])
    x = torch.tensor(x, dtype=torch.float32, device=dev)
    y = torch.tensor(y, dtype=torch.long, device=dev)

    # 2. Instantiate a model, loss function, and optimizer
    embedding_size = 2
    model = Word2Vec(len(vocab), embedding_size).to(dev)
    loss_func = nn.CrossEntropyLoss()
    optimizer = torch.optim.Adam(model.parameters(), **OPTIMIZER_PARAM)

    # 3. Train the model
    for epoch in range(1, EPOCH_MAX + 1):
        train_loss = train(model, [[x, y]], loss_func, optimizer)
        if epoch % EPOCH_LOG == 0:
            print(f'{epoch:>6}), TrLoss={train_loss:.6f}')

    # 4. Visualize the Word2Vec table
    W, Wt = model.parameters()
    for i, word in enumerate(words):
        x, y = W[0][i].item(), W[1][i].item()
        plt.scatter(x, y)
        plt.annotate(word,
                     xy=(x, y),
                     xytext=(5, 2),
                     textcoords='offset points',
                     ha='right',
                     va='bottom')
    plt.show()
Exemplo n.º 4
0
    train_tensors = torch.sparse_coo_tensor([train_vectors.row, train_vectors.col], train_vectors.data, train_vectors.shape, dtype=torch.float32).to(dev)
    train_targets = torch.LongTensor(train_raw.target).to(dev)
    tests_tensors = torch.sparse_coo_tensor([tests_vectors.row, tests_vectors.col], tests_vectors.data, tests_vectors.shape, dtype=torch.float32).to(dev)
    tests_targets = torch.LongTensor(tests_raw.target).to(dev)

    # 2. Instantiate a model, loss function, and optimizer
    model = MyTwoLayerNN(train_tensors.shape[1]).to(dev)
    loss_func = F.cross_entropy
    optimizer = torch.optim.Adadelta(model.parameters(), **OPTIMIZER_PARAM)
    print('* The number of model parameters: ', sum([np.prod(p.size()) for p in model.parameters() if p.requires_grad]))

    # 3. Train the model
    loss_list = []
    start = time.time()
    for epoch in range(1, EPOCH_MAX + 1):
        train_loss = train(model, [(train_tensors, train_targets)], loss_func, optimizer)
        valid_loss, valid_accuracy = evaluate(model, [(tests_tensors, tests_targets)], loss_func)

        loss_list.append([epoch, train_loss, valid_loss, valid_accuracy])
        if epoch % EPOCH_LOG == 0:
            elapse = time.time() - start
            print(f'{epoch:>6} ({elapse:>6.2f} sec), TrLoss={train_loss:.6f}, VaLoss={valid_loss:.6f}, VaAcc={valid_accuracy:.3f}')
    elapse = time.time() - start

    # 4. Visualize the loss curves
    plt.title(f'Training and Validation Losses (time: {elapse:.2f} [sec] @ CUDA: {USE_CUDA})')
    loss_array = np.array(loss_list)
    plt.plot(loss_array[:,0], loss_array[:,1] * 1e4, 'r-', label='Training loss')
    plt.plot(loss_array[:,0], loss_array[:,2] * 1e4, 'g-', label='Validation loss')
    plt.xlabel('Epochs')
    plt.ylabel('Loss values [1e-4]')
Exemplo n.º 5
0
                                            train=False,
                                            transform=preproc)
    loader_train = torch.utils.data.DataLoader(data_train, **DATA_LOADER_PARAM)
    loader_valid = torch.utils.data.DataLoader(data_valid, **DATA_LOADER_PARAM)

    # 2. Instantiate a model, loss function, and optimizer
    model = MyCNN().to(dev)
    loss_func = F.cross_entropy
    optimizer = torch.optim.SGD(model.parameters(), **OPTIMIZER_PARAM)
    scheduler = torch.optim.lr_scheduler.StepLR(optimizer, **SCHEDULER_PARAM)

    # 3.1. Train the model
    loss_list = []
    start = time.time()
    for epoch in range(1, EPOCH_MAX + 1):
        train_loss = train(model, loader_train, loss_func, optimizer)
        valid_loss, valid_accuracy = evaluate(model, loader_valid, loss_func)
        scheduler.step()

        loss_list.append([epoch, train_loss, valid_loss, valid_accuracy])
        if epoch % EPOCH_LOG == 0:
            elapse = (time.time() - start) / 60
            print(
                f'{epoch:>6} ({elapse:>6.2f} min), TrLoss={train_loss:.6f}, VaLoss={valid_loss:.6f}, VaAcc={valid_accuracy:.3f}, lr={scheduler.get_last_lr()}'
            )
    elapse = (time.time() - start) / 60

    # 3.2. Save the trained model if necessary
    if SAVE_MODEL:
        torch.save(model.state_dict(), SAVE_MODEL)