def test_train(self): mcbm = MCBM(8, 4, 20) parameters = mcbm._parameters() mcbm.train( randint(2, size=[mcbm.dim_in, 2000]), randint(2, size=[mcbm.dim_out, 2000]), parameters={ 'verbosity': 0, 'max_iter': 0, }) # parameters should not have changed self.assertLess(max(abs(mcbm._parameters() - parameters)), 1e-20) def callback(i, mcbm): return mcbm.train( randint(2, size=[mcbm.dim_in, 10000]), randint(2, size=[mcbm.dim_out, 10000]), parameters={ 'verbosity': 0, 'max_iter': 10, 'threshold': 0., 'batch_size': 1999, 'callback': callback, 'cb_iter': 1, })
def test_train(self): mcbm = MCBM(8, 4, 20) parameters = mcbm._parameters() mcbm.train( randint(2, size=[mcbm.dim_in, 2000]), randint(2, size=[mcbm.dim_out, 2000]), parameters={"verbosity": 0, "max_iter": 0}, ) # parameters should not have changed self.assertLess(max(abs(mcbm._parameters() - parameters)), 1e-20) def callback(i, mcbm): return mcbm.train( randint(2, size=[mcbm.dim_in, 10000]), randint(2, size=[mcbm.dim_out, 10000]), parameters={ "verbosity": 0, "max_iter": 10, "threshold": 0.0, "batch_size": 1999, "callback": callback, "cb_iter": 1, }, )
def test_gradient(self): mcbm = MCBM(5, 2, 10) # choose random parameters mcbm._set_parameters(randn(*mcbm._parameters().shape)) err = mcbm._check_gradient( randint(2, size=[mcbm.dim_in, 1000]), randint(2, size=[mcbm.dim_out, 1000]), 1e-5) self.assertLess(err, 1e-8) # test with regularization turned off for param in ['priors', 'weights', 'features', 'pred', 'input_bias', 'output_bias']: err = mcbm._check_gradient( randint(2, size=[mcbm.dim_in, 1000]), randint(2, size=[mcbm.dim_out, 1000]), 1e-5, parameters={ 'train_prior': param == 'priors', 'train_weights': param == 'weights', 'train_features': param == 'features', 'train_predictors': param == 'pred', 'train_input_bias': param == 'input_bias', 'train_output_bias': param == 'output_bias', }) self.assertLess(err, 1e-7) # test with regularization turned on for norm in ['L1', 'L2']: for param in ['priors', 'weights', 'features', 'pred', 'input_bias', 'output_bias']: err = mcbm._check_gradient( randint(2, size=[mcbm.dim_in, 1000]), randint(2, size=[mcbm.dim_out, 1000]), 1e-7, parameters={ 'train_prior': param == 'priors', 'train_weights': param == 'weights', 'train_features': param == 'features', 'train_predictors': param == 'pred', 'train_input_bias': param == 'input_bias', 'train_output_bias': param == 'output_bias', 'regularize_features': {'strength': 0.5, 'norm': norm}, 'regularize_predictors': {'strength': 0.5, 'norm': norm}, 'regularize_weights': {'strength': 0.5, 'norm': norm}, }) self.assertLess(err, 1e-6) self.assertFalse(any(isnan( mcbm._parameter_gradient( randint(2, size=[mcbm.dim_in, 1000]), randint(2, size=[mcbm.dim_out, 1000]), mcbm._parameters()))))
def test_gradient(self): mcbm = MCBM(5, 2, 10) # choose random parameters mcbm._set_parameters(randn(*mcbm._parameters().shape)) err = mcbm._check_gradient(randint(2, size=[mcbm.dim_in, 1000]), randint(2, size=[mcbm.dim_out, 1000]), 1e-5) self.assertLess(err, 1e-8) # test with regularization turned off for param in ["priors", "weights", "features", "pred", "input_bias", "output_bias"]: err = mcbm._check_gradient( randint(2, size=[mcbm.dim_in, 1000]), randint(2, size=[mcbm.dim_out, 1000]), 1e-5, parameters={ "train_prior": param == "priors", "train_weights": param == "weights", "train_features": param == "features", "train_predictors": param == "pred", "train_input_bias": param == "input_bias", "train_output_bias": param == "output_bias", }, ) self.assertLess(err, 1e-7) # test with regularization turned on for norm in ["L1", "L2"]: for param in ["priors", "weights", "features", "pred", "input_bias", "output_bias"]: err = mcbm._check_gradient( randint(2, size=[mcbm.dim_in, 1000]), randint(2, size=[mcbm.dim_out, 1000]), 1e-7, parameters={ "train_prior": param == "priors", "train_weights": param == "weights", "train_features": param == "features", "train_predictors": param == "pred", "train_input_bias": param == "input_bias", "train_output_bias": param == "output_bias", "regularize_features": {"strength": 0.5, "norm": norm}, "regularize_predictors": {"strength": 0.5, "norm": norm}, "regularize_weights": {"strength": 0.5, "norm": norm}, }, ) self.assertLess(err, 1e-6) self.assertFalse( any( isnan( mcbm._parameter_gradient( randint(2, size=[mcbm.dim_in, 1000]), randint(2, size=[mcbm.dim_out, 1000]), mcbm._parameters() ) ) ) )