Exemplo n.º 1
0
	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,
				})
Exemplo n.º 2
0
    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,
            },
        )
Exemplo n.º 3
0
	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()))))
Exemplo n.º 4
0
    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()
                    )
                )
            )
        )