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')
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')