def train_CNN():
    print('[+] Load Data')
    text, label, train_data, valid_data, test_data = ld.load_data()
    print('[+] Build Vocabulary')
    text, label = ld.build_vocabulary(text, label, train_data)
    print('[+] Set Iterators')
    train_iter, valid_iter, test_iter = ld.fetch_iterators(
        train_data, valid_data, test_data)
    print('[i] Train Iterator Info: \n')
    print(f'[i] Length of Train Iter: {len(train_iter)}')

    cnn_model = build.set_NN(text, label)

    print(
        f'[i] The model has {build.count_parameters(cnn_model):,} trainable parameters'
    )

    cnn_model = build.embed_vectors(text, cnn_model)

    print('[+] Save Text Data')
    with open('model/TEXT.Field', 'wb') as f:
        dill.dump(text, f)

    cnn_model, optimizer, criterion = build.fetch_loss_utils(cnn_model)

    best_valid_loss = float('inf')

    for epoch in range(p.configure()['EPOCHS']):

        start = time.time()

        train_loss, train_acc = build.train(cnn_model, train_iter, optimizer,
                                            criterion)
        valid_loss, valid_acc = build.evaluate(cnn_model, valid_iter,
                                               criterion)

        end = time.time()

        epoch_mins, epoch_secs = build.epoch_times(start, end)

        if valid_loss < best_valid_loss:

            best_valid_loss = valid_loss

            torch.save(cnn_model, p.configure()['MODEL'])

        print(f'Epoch: {epoch+1:02} | Epoch Time: {epoch_mins}m {epoch_secs}s')
        print(
            f'\tTrain Loss: {train_loss:.3f} | Train Acc: {train_acc*100:.2f}%'
        )
        print(
            f'\t Val. Loss: {valid_loss:.3f} |  Val. Acc: {valid_acc*100:.2f}%'
        )

    return cnn_model
def train_test_model(msg=''):
    msg = msg.replace('true', 'True')
    msg = msg.replace('false', 'False')
    msg = ast.literal_eval(msg)

    if (type(msg) == dict):
        input_data = msg
    else:
        return "BAD JSON!!"

    file_name = input_data['FileName']
    if (input_data['Train'] == False):
        pred = build.predict(file_name, input_data['Bars'])
        print(pred)
        responseJSON = {}
        responseJSON['Pred'] = pred
        return json.dumps(responseJSON) + "\r\n"

    data = input_data['Data']
    date = input_data['Time']

    testSize = int(input_data['TestingPart'] / 100 * len(data))
    trainSize = len(data) - testSize

    train = build.train(training_set=data[:trainSize],
                        date=date[:trainSize],
                        lr=input_data['LearningRate'],
                        scale=input_data['Scale'],
                        epochs=input_data['Epochs'],
                        momentum=input_data['Momentum'],
                        optimizer=input_data['Optimizer'],
                        loss=input_data['Loss'],
                        file_name=file_name,
                        architecture=input_data['Architecture'],
                        cuda=input_data['GPU'])
    test = build.test(testing_set=data[trainSize:],
                      date=date[trainSize:],
                      file_name=input_data['FileName'])
    print(train)
    print(test)

    evaluate = build.evaluate(file_name=file_name,
                              testing_weight=input_data['TestingWeight'])
    print(evaluate)

    pred = build.predict(file_name, input_data['Bars'])
    print(pred)

    responseJSON = {}
    responseJSON['Eval'] = evaluate
    responseJSON['Pred'] = pred

    return json.dumps(responseJSON) + "\r\n"
示例#3
0
def experiment(param):
    command = CliArgs(param)
    args = command.parse()

    layout = args.layout
    train_data = DataPipe(args.train_data, layout)
    predict_data = DataPipe(args.predict_data, layout)

    output_data = args.output_data

    if train_data is not None:
        train_dataset = train_data.run()
        output_data = train(train_dataset, layout)
示例#4
0
def train_model():

    # prepare data
    text, label, train_data, valid_data, test_data = ds.fetch_data()
    text, label = ds.build_vocabulary(text, label, train_data)
    train_iter, valid_iter, test_iter = ds.fetch_iterators(
        train_data, valid_data, test_data)
    # build model and set parameters
    cnn_model = build.set_NN(text)
    print(
        f'The model has {build.count_parameters(cnn_model):,} trainable parameters'
    )
    cnn_model = build.embed_vectors(text, cnn_model)
    cnn_model, optimizer, criterion = build.fetch_loss_utils(cnn_model)
    # 'save model' conditional
    best_valid_loss = float('inf')
    # training loop
    print('[i] Begin Training...')
    for epoch in range(P.configure()['EPOCHS']):

        start_time = time.time()

        train_loss, train_acc = build.train(cnn_model, train_iter, optimizer,
                                            criterion)
        valid_loss, valid_acc = build.evaluate(cnn_model, valid_iter,
                                               criterion)

        end_time = time.time()

        epoch_mins, epoch_secs = build.epoch_time(start_time, end_time)

        if valid_loss < best_valid_loss:

            best_valid_loss = valid_loss
            torch.save(cnn_model, P.configure()['model'])

        print(f'Epoch: {epoch+1:02} | Epoch Time: {epoch_mins}m {epoch_secs}s')
        print(
            f'\tTrain Loss: {train_loss:.3f} | Train Acc: {train_acc*100:.2f}%'
        )
        print(
            f'\t Val. Loss: {valid_loss:.3f} |  Val. Acc: {valid_acc*100:.2f}%'
        )

    print('[i] Training Finished...\n')

    return cnn_model, text
示例#5
0
from build import train
train('new-training.yaml', 'my_file.yaml', docker_user = '******', github_user = '******', train_name = 'emote-trainb33', version='4.4')