def demo_helper(): print('\t** Learn the AND function using 0 hidden layers (logistic regression) **') arrs = [] labels = [] (arrs.append([0, 0]), labels.append('false')) (arrs.append([0, 1]), labels.append('true')) (arrs.append([1, 0]), labels.append('true')) (arrs.append([1, 1]), labels.append('true')) num_hidden_layers = 0 ann = Ann(arrs, labels, n_h=num_hidden_layers) ann.train() if (ann.validate_train() == 1): print('\t** The AND function was learned correctly using 0 hidden layers **\n') else: print('\t** ERROR (when learning the AND function using 0 hidden layers **\n') print('\t** Learn the AND function using 1 hidden layer **') arrs = [] labels = [] (arrs.append([0, 0]), labels.append('false')) (arrs.append([0, 1]), labels.append('true')) (arrs.append([1, 0]), labels.append('true')) (arrs.append([1, 1]), labels.append('true')) num_hidden_layers = 1 ann = Ann(arrs, labels, n_h=num_hidden_layers) ann.train() if (ann.validate_train() == 1): print('\t** The AND function was learned correctly using 1 hidden layers **\n') else: print('\t** ERROR (when learning the AND function using 1 hidden layers **\n') print('\t** Learn the XOR function using 0 hidden layers (logistic regression) **') arrs = [] labels = [] (arrs.append([0, 0]), labels.append('false')) (arrs.append([0, 1]), labels.append('true')) (arrs.append([1, 0]), labels.append('true')) (arrs.append([1, 1]), labels.append('false')) num_hidden_layers = 0 ann = Ann(arrs, labels, n_h=num_hidden_layers) ann.train() if (ann.validate_train() != 1): print('\t** The XOR function was not learned correctly (as expected) because logistic regression (0 hidden layers) \n' + 'cannot create a boundary through a non-linearly separable data-set (which the XOR function is)**\n') else: print('\t** ERROR (when learning the XOR function using 0 hidden layers **\n') '''
def test_9(self): # function 1 (XOR function) on 1 hidden layers arrs = [] arrs.append([0, 0]) arrs.append([0, 1]) arrs.append([1, 0]) arrs.append([1, 1]) labels = [] labels.append('false') labels.append('true') labels.append('true') labels.append('false') ann = Ann(arrs, labels, n_h=1) # Train and save model model = ann.train()[0][0] # Take the first model from the list of models in the tuple ann.validate_train() # Check to see if train_accuracy is over 90% self.assertTrue(ann.train_accuracy() > 0.9) # Load the trained model into a new neural network ann_from_model = Ann(model) # Evaluate some vectors using this neural network initialized only with a model self.assertEqual(ann_from_model.h_by_class(arrs[0]), 'false') self.assertEqual(ann_from_model.h_by_class(arrs[1]), 'true') x = [1.1, 0.9] self.assertEqual(ann_from_model.h_by_class(x), 'false') # function 2 on 2 hidden layers arrs2 = [] arrs2.append([1, 1]) arrs2.append([2, 2]) arrs2.append([1, 3]) arrs2.append([2, 10]) arrs2.append([1, -1]) arrs2.append([-2, -2]) arrs2.append([1, -3]) arrs2.append([-2, -10]) labels2 = [] labels2.append('false') labels2.append('false') labels2.append('false') labels2.append('false') labels2.append('true') labels2.append('true') labels2.append('true') labels2.append('true') ann = Ann(arrs2, labels2, n_h=2) model2 = ann.train()[0][0] ann.validate_train() # Load the second model ann_from_model = Ann(model2) # Evaluate some vectors using this neural network initialized only with a model self.assertEqual(ann_from_model.h_by_class(arrs2[0]), 'false') self.assertEqual(ann_from_model.h_by_class(arrs2[len(arrs2) - 1]), 'true') x = [1, -5] self.assertEqual(ann_from_model.h_by_class(x), 'true') # Load the first model again ann_from_model = Ann(model) # Evaluate some vectors using this neural network initialized only with a model self.assertEqual(ann_from_model.h_by_class(arrs[0]), 'false') self.assertEqual(ann_from_model.h_by_class(arrs[1]), 'true') x = [1.1, 0.9] self.assertEqual(ann_from_model.h_by_class(x), 'false') # Try pickling our model into a sister folder model_name = model.name directory = '../Ann-models' path_to_file = directory + '/' + model_name if not os.path.exists(directory): os.makedirs(directory) pickle.dump(model, open(path_to_file, 'wb')) # Try unpickling our model unpickled_model = pickle.load(open(path_to_file, 'rb')) # Load unpickled model and test ann_from_pickle = Ann(unpickled_model) # Evaluate some vectors using this neural network initialized only with a model self.assertEqual(ann_from_pickle.h_by_class(arrs[0]), 'false') self.assertEqual(ann_from_pickle.h_by_class(arrs[1]), 'true') x = [1.1, 0.9] self.assertEqual(ann_from_pickle.h_by_class(x), 'false')
def test_7(self): # Learn some basic functions# # Linearly-separable data-sets# # function 1 (AND function) on 0 hidden layers arrs = [] arrs.append([0, 0]) arrs.append([0, 1]) arrs.append([1, 0]) arrs.append([1, 1]) labels = [] labels.append('false') labels.append('true') labels.append('true') labels.append('true') ann = Ann(arrs, labels, n_h=0) ann.train() ann.validate_train() # Check to see if train_accuracy is over 90% self.assertTrue(ann.train_accuracy() > 0.9) # function 2 on 2 hidden layers arrs = [] arrs.append([1, 1]) arrs.append([2, 2]) arrs.append([1, 3]) arrs.append([2, 10]) arrs.append([1, -1]) arrs.append([-2, -2]) arrs.append([1, -3]) arrs.append([-2, -10]) labels = [] labels.append('false') labels.append('false') labels.append('false') labels.append('false') labels.append('true') labels.append('true') labels.append('true') labels.append('true') ann = Ann(arrs, labels, n_h=2) ann.train() ann.validate_train() # Check to see if train_accuracy is over 90% self.assertTrue(ann.train_accuracy() > 0.9) # Non-linearly-separable data-sets# # function 1 (XOR function) on 1 hidden layers arrs = [] arrs.append([0, 0]) arrs.append([0, 1]) arrs.append([1, 0]) arrs.append([1, 1]) labels = [] labels.append('false') labels.append('true') labels.append('true') labels.append('false') ann = Ann(arrs, labels, n_h=1) ann.train(it=3000) ann.validate_train() # Check to see if train_accuracy is over 90% self.assertTrue(ann.train_accuracy() > 0.9) # function 1b (XOR function) on 1 hidden layers (with custom architecture) arrs = [] arrs.append([0, 0]) arrs.append([0, 1]) arrs.append([1, 0]) arrs.append([1, 1]) labels = [] labels.append('false') labels.append('true') labels.append('true') labels.append('false') s = [4, 5] # Custom hidden layer architecture ann = Ann(arrs, labels, n_h=len(s), s=s) ann.train() ann.validate_train() # Check to see if train_accuracy is over 90% self.assertTrue(ann.train_accuracy() > 0.9) # function 1 (two nested sets) on 2 hidden layers arrs = [] arrs.append([0, 0]) arrs.append([0, 1]) arrs.append([1, 1]) arrs.append([1, 1]) arrs.append([10, 0]) arrs.append([0, 10]) arrs.append([110, 10]) arrs.append([-10, 10]) labels = [] labels.append('false') labels.append('false') labels.append('false') labels.append('false') labels.append('true') labels.append('true') labels.append('true') labels.append('true') ann = Ann(arrs, labels, n_h=0) ann.train() ann.validate_train() # Check to see if train_accuracy is over 90% self.assertTrue(ann.train_accuracy() > 0.9)
def demo_helper(): init_logger('debug') print('\t** Learn the AND function using 0 hidden layers (logistic regression) **') arrs = [] labels = [] (arrs.append([0, 0]), labels.append('false')) (arrs.append([0, 1]), labels.append('true')) (arrs.append([1, 0]), labels.append('true')) (arrs.append([1, 1]), labels.append('true')) num_hidden_layers = 0 ann = Ann(arrs, labels, n_h=num_hidden_layers) ann.train() if (ann.validate_train() == 1): print('\t** The AND function was learned correctly using 0 hidden layers **\n') else: print('\t** ERROR (when learning the AND function using 0 hidden layers **\n') print('\t** Learn the AND function using 1 hidden layer **') arrs = [] labels = [] (arrs.append([0, 0]), labels.append('false')) (arrs.append([0, 1]), labels.append('true')) (arrs.append([1, 0]), labels.append('true')) (arrs.append([1, 1]), labels.append('true')) num_hidden_layers = 1 ann = Ann(arrs, labels, n_h=num_hidden_layers) ann.train() if (ann.validate_train() == 1): print('\t** The AND function was learned correctly using 1 hidden layers **\n') else: print('\t** ERROR (when learning the AND function using 1 hidden layers **\n') print('\t** Learn the XOR function using 0 hidden layers (logistic regression) **') arrs = [] labels = [] (arrs.append([0, 0]), labels.append('false')) (arrs.append([0, 1]), labels.append('true')) (arrs.append([1, 0]), labels.append('true')) (arrs.append([1, 1]), labels.append('false')) num_hidden_layers = 0 ann = Ann(arrs, labels, n_h=num_hidden_layers) ann.train() if (ann.validate_train() != 1): print('\t** The XOR function was not learned correctly (as expected) because logistic regression (0 hidden layers) \n' + 'cannot create a boundary through a non-linearly separable data-set (which the XOR function is)**\n') else: print('\t** ERROR (when learning the XOR function using 0 hidden layers **\n') print('\t** Learn the XOR function using 1 hidden layer **') arrs = [] labels = [] (arrs.append([0, 0]), labels.append('false')) (arrs.append([0, 1]), labels.append('true')) (arrs.append([1, 0]), labels.append('true')) (arrs.append([1, 1]), labels.append('false')) num_hidden_layers = 1 ann = Ann(arrs, labels, n_h=num_hidden_layers) ann.train() if (ann.validate_train() == 1): print('\t** The XOR function was learned correctly using 1 hidden layers **\n') else: print('\t** ERROR (when learning the XOR function using 1 hidden layers **\n')
def test_9(self): # function 1 (XOR function) on 1 hidden layers arrs = [] arrs.append([0, 0]) arrs.append([0, 1]) arrs.append([1, 0]) arrs.append([1, 1]) labels = [] labels.append('false') labels.append('true') labels.append('true') labels.append('false') ann = Ann(arrs, labels, n_h=1) # Train and save model model = ann.train()[0][ 0] # Take the first model from the list of models in the tuple ann.validate_train() # Check to see if train_accuracy is over 90% self.assertTrue(ann.train_accuracy() > 0.9) # Load the trained model into a new neural network ann_from_model = Ann(model) # Evaluate some vectors using this neural network initialized only with a model self.assertEqual(ann_from_model.h_by_class(arrs[0]), 'false') self.assertEqual(ann_from_model.h_by_class(arrs[1]), 'true') x = [1.1, 0.9] self.assertEqual(ann_from_model.h_by_class(x), 'false') # function 2 on 2 hidden layers arrs2 = [] arrs2.append([1, 1]) arrs2.append([2, 2]) arrs2.append([1, 3]) arrs2.append([2, 10]) arrs2.append([1, -1]) arrs2.append([-2, -2]) arrs2.append([1, -3]) arrs2.append([-2, -10]) labels2 = [] labels2.append('false') labels2.append('false') labels2.append('false') labels2.append('false') labels2.append('true') labels2.append('true') labels2.append('true') labels2.append('true') ann = Ann(arrs2, labels2, n_h=2) model2 = ann.train()[0][0] ann.validate_train() # Load the second model ann_from_model = Ann(model2) # Evaluate some vectors using this neural network initialized only with a model self.assertEqual(ann_from_model.h_by_class(arrs2[0]), 'false') self.assertEqual(ann_from_model.h_by_class(arrs2[len(arrs2) - 1]), 'true') x = [1, -5] self.assertEqual(ann_from_model.h_by_class(x), 'true') # Load the first model again ann_from_model = Ann(model) # Evaluate some vectors using this neural network initialized only with a model self.assertEqual(ann_from_model.h_by_class(arrs[0]), 'false') self.assertEqual(ann_from_model.h_by_class(arrs[1]), 'true') x = [1.1, 0.9] self.assertEqual(ann_from_model.h_by_class(x), 'false') # Try pickling our model into a sister folder model_name = model.name directory = '../Ann-models' path_to_file = directory + '/' + model_name if not os.path.exists(directory): os.makedirs(directory) pickle.dump(model, open(path_to_file, 'wb')) # Try unpickling our model unpickled_model = pickle.load(open(path_to_file, 'rb')) # Load unpickled model and test ann_from_pickle = Ann(unpickled_model) # Evaluate some vectors using this neural network initialized only with a model self.assertEqual(ann_from_pickle.h_by_class(arrs[0]), 'false') self.assertEqual(ann_from_pickle.h_by_class(arrs[1]), 'true') x = [1.1, 0.9] self.assertEqual(ann_from_pickle.h_by_class(x), 'false')
def test_7(self): # Learn some basic functions# # Linearly-separable data-sets# # function 1 (AND function) on 0 hidden layers arrs = [] arrs.append([0, 0]) arrs.append([0, 1]) arrs.append([1, 0]) arrs.append([1, 1]) labels = [] labels.append('false') labels.append('true') labels.append('true') labels.append('true') ann = Ann(arrs, labels, n_h=0) ann.train() ann.validate_train() # Check to see if train_accuracy is over 90% self.assertTrue(ann.train_accuracy() > 0.9) # function 2 on 2 hidden layers arrs = [] arrs.append([1, 1]) arrs.append([2, 2]) arrs.append([1, 3]) arrs.append([2, 10]) arrs.append([1, -1]) arrs.append([-2, -2]) arrs.append([1, -3]) arrs.append([-2, -10]) labels = [] labels.append('false') labels.append('false') labels.append('false') labels.append('false') labels.append('true') labels.append('true') labels.append('true') labels.append('true') ann = Ann(arrs, labels, n_h=2) ann.train() ann.validate_train() # Check to see if train_accuracy is over 90% self.assertTrue(ann.train_accuracy() > 0.9) # Non-linearly-separable data-sets# # function 1 (XOR function) on 1 hidden layers arrs = [] arrs.append([0, 0]) arrs.append([0, 1]) arrs.append([1, 0]) arrs.append([1, 1]) labels = [] labels.append('false') labels.append('true') labels.append('true') labels.append('false') ann = Ann(arrs, labels, n_h=1) ann.train(it=3000) ann.validate_train() # Check to see if train_accuracy is over 90% self.assertTrue(ann.train_accuracy() > 0.9) # function 1b (XOR function) on 1 hidden layers (with custom architecture) arrs = [] arrs.append([0, 0]) arrs.append([0, 1]) arrs.append([1, 0]) arrs.append([1, 1]) labels = [] labels.append('false') labels.append('true') labels.append('true') labels.append('false') s = [4, 5] # Custom hidden layer architecture ann = Ann(arrs, labels, n_h=len(s), s=s) ann.train() ann.validate_train() # Check to see if train_accuracy is over 90% self.assertTrue(ann.train_accuracy() > 0.9) # function 1 (two nested sets) on 2 hidden layers arrs = [] arrs.append([0, 0]) arrs.append([0, 1]) arrs.append([1, 1]) arrs.append([1, 1]) arrs.append([10, 0]) arrs.append([0, 10]) arrs.append([110, 10]) arrs.append([-10, 10]) labels = [] labels.append('false') labels.append('false') labels.append('false') labels.append('false') labels.append('true') labels.append('true') labels.append('true') labels.append('true') ann = Ann(arrs, labels, n_h=0) ann.train() ann.validate_train() # Check to see if train_accuracy is over 90% self.assertTrue(ann.train_accuracy() > 0.9)