def test_gradient(self): mcgsm = MCGSM(5, 2, 2, 4, 10) cholesky_factors = [] for k in range(mcgsm.num_components): cholesky_factors.append(cholesky(cov(randn(mcgsm.dim_out, mcgsm.dim_out ** 2)))) mcgsm.cholesky_factors = cholesky_factors mcgsm.linear_features = randn(mcgsm.num_components, mcgsm.dim_in) / 5.0 mcgsm.means = randn(mcgsm.dim_out, mcgsm.num_components) / 5.0 err = mcgsm._check_gradient(randn(mcgsm.dim_in, 1000), randn(mcgsm.dim_out, 1000), 1e-5) self.assertLess(err, 1e-8) # without regularization for param in ["priors", "scales", "weights", "features", "chol", "pred", "linear_features", "means"]: err = mcgsm._check_gradient( randn(mcgsm.dim_in, 1000), randn(mcgsm.dim_out, 1000), 1e-5, parameters={ "train_prior": param == "priors", "train_scales": param == "scales", "train_weights": param == "weights", "train_features": param == "features", "train_cholesky_factors": param == "chol", "train_predictors": param == "pred", "train_linear_features": param == "linear_features", "train_means": param == "means", }, ) self.assertLess(err, 1e-8) # with regularization for norm in ["L1", "L2"]: for param in ["priors", "scales", "weights", "features", "chol", "pred", "linear_features", "means"]: err = mcgsm._check_gradient( randn(mcgsm.dim_in, 1000), randn(mcgsm.dim_out, 1000), 1e-7, parameters={ "train_prior": param == "priors", "train_scales": param == "scales", "train_weights": param == "weights", "train_features": param == "features", "train_cholesky_factors": param == "chol", "train_predictors": param == "pred", "train_linear_features": param == "linear_features", "train_means": param == "means", "regularize_features": {"strength": 0.4, "norm": norm}, "regularize_predictors": {"strength": 0.5, "norm": norm}, "regularize_weights": {"strength": 0.7, "norm": norm}, "regularize_linear_features": {"strength": 0.3, "norm": norm}, "regularize_means": {"strength": 0.6, "norm": norm}, }, ) self.assertLess(err, 1e-6)
def test_gradient(self): mcgsm = MCGSM(5, 2, 2, 4, 10) cholesky_factors = [] for k in range(mcgsm.num_components): cholesky_factors.append(cholesky(cov(randn(mcgsm.dim_out, mcgsm.dim_out**2)))) mcgsm.cholesky_factors = cholesky_factors mcgsm.linear_features = randn(mcgsm.num_components, mcgsm.dim_in) / 5. mcgsm.means = randn(mcgsm.dim_out, mcgsm.num_components) / 5. err = mcgsm._check_gradient( randn(mcgsm.dim_in, 1000), randn(mcgsm.dim_out, 1000), 1e-5) self.assertLess(err, 1e-8) # without regularization for param in ['priors', 'scales', 'weights', 'features', 'chol', 'pred', 'linear_features', 'means']: err = mcgsm._check_gradient( randn(mcgsm.dim_in, 1000), randn(mcgsm.dim_out, 1000), 1e-5, parameters={ 'train_prior': param == 'priors', 'train_scales': param == 'scales', 'train_weights': param == 'weights', 'train_features': param == 'features', 'train_cholesky_factors': param == 'chol', 'train_predictors': param == 'pred', 'train_linear_features': param == 'linear_features', 'train_means': param == 'means', }) self.assertLess(err, 1e-8) # with regularization for norm in ['L1', 'L2']: for param in ['priors', 'scales', 'weights', 'features', 'chol', 'pred', 'linear_features', 'means']: err = mcgsm._check_gradient( randn(mcgsm.dim_in, 1000), randn(mcgsm.dim_out, 1000), 1e-7, parameters={ 'train_prior': param == 'priors', 'train_scales': param == 'scales', 'train_weights': param == 'weights', 'train_features': param == 'features', 'train_cholesky_factors': param == 'chol', 'train_predictors': param == 'pred', 'train_linear_features': param == 'linear_features', 'train_means': param == 'means', 'regularize_features': {'strength': 0.4, 'norm': norm}, 'regularize_predictors': {'strength': 0.5, 'norm': norm}, 'regularize_weights': {'strength': 0.7, 'norm': norm}, 'regularize_linear_features': {'strength': 0.3, 'norm': norm}, 'regularize_means': {'strength': 0.6, 'norm': norm}, }) self.assertLess(err, 1e-6)
def test_gradient(self): mcgsm = MCGSM(5, 2, 2, 4, 10) cholesky_factors = [] for k in range(mcgsm.num_components): cholesky_factors.append( cholesky(cov(randn(mcgsm.dim_out, mcgsm.dim_out**2)))) mcgsm.cholesky_factors = cholesky_factors mcgsm.linear_features = randn(mcgsm.num_components, mcgsm.dim_in) / 5. mcgsm.means = randn(mcgsm.dim_out, mcgsm.num_components) / 5. err = mcgsm._check_gradient(randn(mcgsm.dim_in, 1000), randn(mcgsm.dim_out, 1000), 1e-5) self.assertLess(err, 1e-8) # without regularization for param in [ 'priors', 'scales', 'weights', 'features', 'chol', 'pred', 'linear_features', 'means' ]: err = mcgsm._check_gradient( randn(mcgsm.dim_in, 1000), randn(mcgsm.dim_out, 1000), 1e-5, parameters={ 'train_prior': param == 'priors', 'train_scales': param == 'scales', 'train_weights': param == 'weights', 'train_features': param == 'features', 'train_cholesky_factors': param == 'chol', 'train_predictors': param == 'pred', 'train_linear_features': param == 'linear_features', 'train_means': param == 'means', }) self.assertLess(err, 1e-8) # with regularization for norm in ['L1', 'L2']: for param in [ 'priors', 'scales', 'weights', 'features', 'chol', 'pred', 'linear_features', 'means' ]: err = mcgsm._check_gradient( randn(mcgsm.dim_in, 1000), randn(mcgsm.dim_out, 1000), 1e-7, parameters={ 'train_prior': param == 'priors', 'train_scales': param == 'scales', 'train_weights': param == 'weights', 'train_features': param == 'features', 'train_cholesky_factors': param == 'chol', 'train_predictors': param == 'pred', 'train_linear_features': param == 'linear_features', 'train_means': param == 'means', 'regularize_features': { 'strength': 0.4, 'norm': norm }, 'regularize_predictors': { 'strength': 0.5, 'norm': norm }, 'regularize_weights': { 'strength': 0.7, 'norm': norm }, 'regularize_linear_features': { 'strength': 0.3, 'norm': norm }, 'regularize_means': { 'strength': 0.6, 'norm': norm }, }) self.assertLess(err, 1e-6)