Esempio n. 1
0
def tsetlin_with_log(clauses, T, s, x_train, y_train, x_val, y_val,
                     name_dataset):
    tm = MultiClassTsetlinMachine(clauses, T, s)

    log = Logger(name_dataset, x_train, 'mctm', clauses, T, s)
    print(log.metadata)
    print('predicting 400 epochs')
    for i in range(400):
        start = time()
        tm.fit(x_train, y_train, epochs=1, incremental=True)
        stop = time()
        pred = tm.predict(x_val)
        conf_matrix = confusion_matrix(np.asarray(y_val), pred)
        print('sum predict:', sum(pred), 'sum validation:', sum(y_val))
        accuracy = 100 * (pred == np.asarray(y_val)).mean()
        print("#%d Accuracy: %.2f%% (%.2fs)" % (i + 1, accuracy, stop - start))
        print('Confusion matrix:')
        print(conf_matrix)
        log.add_epoch(np.asarray(y_val), pred)
        log.save_log()
    print('done')
x_val = np.asarray(dataset[2], np.uint8)
y_val = dataset[3]

# Tsetlin machine
clauses = args.CLAUSES
mask = args.MASK
T = args.T
s = args.S

tm = MultiClassConvolutionalTsetlinMachine2D(clauses, T, s, (mask, mask))

log = Logger(dataset_name, x_train, "TM2D", clauses, T, s, (mask, mask))
print(x_train[0][0])
print(x_train.shape)
print('predicting 400 epochs')
for i in range(400):
    start = time()
    tm.fit(x_train, y_train, epochs=1, incremental=True)
    stop = time()
    pred = tm.predict(x_val)
    conf_matrix = confusion_matrix(np.asarray(y_val), pred)
    print('sum predict:', sum(pred), 'sum validation:', sum(y_val))
    accuracy = 100 * (pred == np.asarray(y_val)).mean()
    print("#%d Accuracy: %.2f%% (%.2fs)" % (i + 1, accuracy, stop - start))
    print('Confusion matrix:')
    print(conf_matrix)
    log.add_epoch(np.asarray(y_val), pred)
    log.save_log()

print('done')
Esempio n. 3
0
def ctm(clauses, T, s, mask, image_array_train, label_array_train,
        image_array_validation, label_array_validation, epochs):
    # find max and min values for the train and validation data
    image_array_train_min = np.amin(image_array_train)
    image_array_train_max = np.amax(image_array_train)
    image_array_validation_min = np.amin(image_array_validation)
    image_array_validation_max = np.amax(image_array_validation)
    print(image_array_train_min, image_array_train_max,
          image_array_validation_min, image_array_validation_max)
    tm = MultiClassConvolutionalTsetlinMachine2D(clauses, T, s, (mask, mask))
    log_creator = Logger("CIFAR_random_samling_validation", "CTM", clauses, T,
                         s, (mask, mask))
    max_acc = 0

    print(
        f"Running CTM with random sampling for {epochs} epochs, with the following parameters:"
    )
    print(f"Clauses: {clauses}, s: {s}, T: {T}, mask: {mask} x {mask}")

    for i in range(epochs):

        start = time()
        # Generate matrix with size of the image array, with random values ranging from 0 to 255
        random_train_matrix = np.random.randint(image_array_train_min,
                                                image_array_train_max,
                                                size=(image_array_train.shape))
        random_validation_matrix = np.random.randint(
            image_array_validation_min,
            image_array_validation_max,
            size=(image_array_validation.shape))

        # Sampeled images
        floaty_train_images = np.greater(random_train_matrix,
                                         image_array_train)
        floaty_validation_images = np.greater(random_validation_matrix,
                                              image_array_validation)

        # Fit
        tm.fit(floaty_train_images,
               label_array_train,
               epochs=1,
               incremental=True)
        stop = time()

        # Predict
        pred_validation = tm.predict(floaty_validation_images)
        pred_train = tm.predict(floaty_train_images)

        # Get some nice logging in terminal
        accuracy_validation = 100 * (
            pred_validation == np.asarray(label_array_validation)).mean()
        if max_acc < accuracy_validation:
            max_acc = accuracy_validation
        conf_matrix_validation = confusion_matrix(
            np.asarray(label_array_validation), pred_validation)
        print('sum predict:', sum(pred_validation), 'sum validation:',
              sum(label_array_validation))
        print(
            "#%d Accuracy on training data: %.2f%% (%.2fs), best accuracy on training data: %.2f%% "
            % (i + 1, accuracy_validation, stop - start, max_acc))
        print('Confusion matrix:')
        print(conf_matrix_validation)

        # Save to logfile
        log_creator.add_epoch(np.asarray(label_array_validation),
                              pred_validation, np.asarray(label_array_train),
                              pred_train)
        log_creator.save_log()
    print('done')
log = Logger(dataset_name, X_train_transformed, "2layerTsetlin", clauses, T, s)

print(type(X_train_transformed), X_train_transformed.shape)
print(type(Y_train), len(Y_train))

print("\nAccuracy over 250 epochs:\n")
max_accuracy = 0.0
for i in range(250):
    start_training = time()
    tm.fit(X_train_transformed, Y_train, epochs=1, incremental=True)
    stop_training = time()

    start_testing = time()
    pred = tm.predict(X_test_transformed)
    result = 100 * (pred == Y_test).mean()
    stop_testing = time()

    print("#%d Accuracy: %.2f%% Training: %.2fs Testing: %.2fs" %
          (i + 1, result, stop_training - start_training,
           stop_testing - start_testing))
    conf_matrix = confusion_matrix(np.asarray(Y_test), pred)
    print('sum predict:', sum(pred), 'sum validation:', sum(Y_test))
    accuracy = 100 * (pred == np.asarray(Y_test)).mean()
    print("#%d Accuracy: %.2f%% (%.2fs)" %
          (i + 1, accuracy, stop_testing - start_training))
    print('Confusion matrix:')
    print(conf_matrix)
    log.add_epoch(np.asarray(Y_test), pred)
    log.save_log()
print('done')