def objective(batch_size, hidden_size, learning_rate):
    batch_size = int(batch_size)
    hidden_size = int(hidden_size)
    TEXT, vocab_size, word_embeddings, train_iter, valid_iter, test_iter = load_patents.load_dataset(
        batch_size, cache_data=False)
    output_size = 2
    embedding_length = 300
    weights = word_embeddings
    model = LSTMClassifier(batch_size, output_size, hidden_size, vocab_size,
                           embedding_length, word_embeddings)
    #model = AttentionModel(batch_size, output_size, hidden_size, vocab_size, embedding_length, weights)
    #model = RNN(batch_size, output_size, hidden_size, vocab_size, embedding_length, weights)
    #model = RCNN(batch_size, output_size, hidden_size, vocab_size, embedding_length, weights)
    #model = SelfAttention(batch_size, output_size, hidden_size, vocab_size, embedding_length, weights)
    loss_fn = F.cross_entropy

    for epoch in range(10):
        #(model, train_iter, epoch, batch_size, learning_rate)
        train_loss, train_acc = train_model(model, train_iter, epoch,
                                            batch_size, learning_rate)
        val_loss, val_acc = eval_model(model, valid_iter, batch_size)

    test_loss, test_acc = eval_model(model, test_iter, batch_size)
    print(f'Test Loss: {test_loss:.3f}, Test Acc: {test_acc:.2f}%')

    return test_acc
def run_best_model(args):
    learning_rate = args.lr
    batch_size = args.batch_size
    hidden_size = args.hidden_size
    epochs = args.epochs
    cache_data = args.cache_data
    output_size = 2
    embedding_length = 300
    TEXT, vocab_size, word_embeddings, train_iter, valid_iter, test_iter = load_patents.load_dataset(
        batch_size, cache_data=cache_data)
    weights = word_embeddings
    model = LSTMClassifier(batch_size, output_size, hidden_size, vocab_size,
                           embedding_length, word_embeddings)

    acc_list = []
    val_list = []
    for epoch in range(epochs):
        #(model, train_iter, epoch, batch_size, learning_rate)
        train_loss, train_acc = train_model(model, train_iter, epoch,
                                            batch_size, learning_rate)
        val_loss, val_acc = eval_model(model, valid_iter, batch_size)
        print(
            f'EPOCH {epoch} -- Train/Val Loss: {train_loss:.3f}/{val_loss:.3f}, Train/Val Acc: {train_acc:.2f}%/{val_acc:.2f}%'
        )
        acc_list.append(train_acc)
        val_list.append(val_acc)

    plt.plot(acc_list, label="train")
    plt.plot(val_list, label="val")
    plt.savefig('acc_graph.png')

    test_loss, test_acc = eval_model(model, test_iter, batch_size)
    print("performance of model:")
    print(f'Test Loss: {test_loss:.3f}, Test Acc: {test_acc:.2f}%')
def train_and_val(args):
    TEXT, vocab_size, word_embeddings, train_iter, valid_iter, test_iter = load_patents.load_dataset(
    )

    learning_rate = args.lr
    batch_size = args.batch_size
    output_size = 2
    hidden_size = 256
    embedding_length = 300

    weights = word_embeddings  #I think ????????

    if args.arch == 'LSTM':
        model = LSTMClassifier(batch_size, output_size, hidden_size,
                               vocab_size, embedding_length, word_embeddings)
    elif args.arch == 'RNN':
        model = AttentionModel(batch_size, output_size, hidden_size,
                               vocab_size, embedding_length, weights)
    elif args.arch == 'RNN':
        model = RNN(batch_size, output_size, hidden_size, vocab_size,
                    embedding_length, weights)
    elif args.arch == 'RNN':
        model = CNN(batch_size, output_size, in_channels, out_channels,
                    kernel_heights, stride, padding, keep_probab, vocab_size,
                    embedding_length, weights)
    elif args.arch == 'RNN':
        model = RCNN(batch_size, output_size, hidden_size, vocab_size,
                     embedding_length, weights)
    elif args.arch == 'selfAttn':
        model = SelfAttention(batch_size, output_size, hidden_size, vocab_size,
                              embedding_length, weights)

    loss_fn = F.cross_entropy

    for epoch in range(10):
        train_loss, train_acc = train_model(model, train_iter, loss_fn, epoch)
        val_loss, val_acc = eval_model(model, valid_iter, loss_fn)

        print(
            f'Epoch: {epoch+1:02}, Train Loss: {train_loss:.3f}, Train Acc: {train_acc:.2f}%, Val. Loss: {val_loss:3f}, Val. Acc: {val_acc:.2f}%'
        )

    test_loss, test_acc = eval_model(model, test_iter, loss_fn)
    print(f'Test Loss: {test_loss:.3f}, Test Acc: {test_acc:.2f}%')

    ts = time.time()
    timestamp = time.ctime(ts)

    with open("./results.out", "w+") as f:
        f.write(timestamp + '\n')
        f.write(f'Test Loss: {test_loss:.3f}, Test Acc: {test_acc:.2f}%\n')
        # for arg in args:
        #     #f.write(arg.name + ':')
        #     f.write(str(arg) + ', ')
        f.write("Epochs: " + str(args.epochs))
        f.write("\n")
Example #4
0
def run_best_model(args):
    learning_rate = args.lr
    batch_size = args.batch_size
    hidden_size = args.hidden_size
    epochs = args.epochs
    output_size = 2
    embedding_length = 300
    TEXT, vocab_size, word_embeddings, train_iter, valid_iter, test_iter = load_patents.load_dataset(
        batch_size)
    weights = word_embeddings
    model = LSTMClassifier(batch_size, output_size, hidden_size, vocab_size,
                           embedding_length, word_embeddings)
    for epoch in range(epochs):
        #(model, train_iter, epoch, batch_size, learning_rate)
        train_loss, train_acc = train_model(model, train_iter, epoch,
                                            batch_size, learning_rate)
        val_loss, val_acc = eval_model(model, valid_iter, batch_size)

    test_loss, test_acc = eval_model(model, test_iter, batch_size)
    print("performance of model:")
    print(f'Test Loss: {test_loss:.3f}, Test Acc: {test_acc:.2f}%')