示例#1
0
    def test_probabilities(self):
        srbm = SemiRBM(9, 12)
        srbm.W = np.matrix(np.random.randn(srbm.X.shape[0], srbm.Y.shape[0]))
        srbm.b = np.matrix(np.random.rand(srbm.X.shape[0], 1))
        srbm.c = np.matrix(np.random.randn(srbm.Y.shape[0], 1))
        srbm.L = np.matrix(np.random.randn(srbm.X.shape[0],
                                           srbm.X.shape[0])) / 2.
        srbm.L = np.triu(srbm.L) + np.triu(
            srbm.L).T - 2. * np.diag(np.diag(srbm.L))

        examples_vis = np.matrix(np.random.rand(srbm.X.shape[0], 100) < 0.5)
        examples_hid = np.matrix(np.random.rand(srbm.Y.shape[0], 100) < 0.5)

        states_vis = utils.binary_numbers(srbm.X.shape[0])
        states_hid = utils.binary_numbers(srbm.Y.shape[0])

        # check that conditional probabilities are normalized
        logprobs = srbm._clogprob_hid_vis(examples_vis,
                                          states_hid,
                                          all_pairs=True)
        self.assertTrue(np.all(utils.logsumexp(logprobs, 1) < 1E-10))

        # test for consistency
        logprobs1 = srbm._ulogprob(examples_vis, examples_hid, all_pairs=True)
        logprobs3 = srbm._clogprob_hid_vis(examples_vis, examples_hid, all_pairs=True) \
                  + srbm._ulogprob_vis(examples_vis).T
        self.assertTrue(np.all(np.abs(logprobs1 - logprobs3) < 1E-10))

        rbm = RBM(srbm.X.shape[0], srbm.Y.shape[0])
        rbm.W = srbm.W
        rbm.b = srbm.b
        rbm.c = srbm.c
        srbm.L *= 0

        logprobs1 = rbm._ulogprob_vis(examples_vis)
        logprobs2 = srbm._ulogprob_vis(examples_vis)
        self.assertTrue(np.all(np.abs(logprobs1 - logprobs2) < 1E-10))

        logprobs1 = rbm._clogprob_hid_vis(examples_vis, examples_hid)
        logprobs2 = srbm._clogprob_hid_vis(examples_vis, examples_hid)
        self.assertTrue(np.all(np.abs(logprobs1 - logprobs2) < 1E-10))
	def test_probabilities(self):
		srbm = SemiRBM(9, 12)
		srbm.W = np.matrix(np.random.randn(srbm.X.shape[0], srbm.Y.shape[0]))
		srbm.b = np.matrix(np.random.rand(srbm.X.shape[0], 1))
		srbm.c = np.matrix(np.random.randn(srbm.Y.shape[0], 1))
		srbm.L = np.matrix(np.random.randn(srbm.X.shape[0], srbm.X.shape[0])) / 2.
		srbm.L = np.triu(srbm.L) + np.triu(srbm.L).T - 2. * np.diag(np.diag(srbm.L))

		examples_vis = np.matrix(np.random.rand(srbm.X.shape[0], 100) < 0.5)
		examples_hid = np.matrix(np.random.rand(srbm.Y.shape[0], 100) < 0.5)

		states_vis = utils.binary_numbers(srbm.X.shape[0])
		states_hid = utils.binary_numbers(srbm.Y.shape[0])

		# check that conditional probabilities are normalized
		logprobs = srbm._clogprob_hid_vis(examples_vis, states_hid, all_pairs=True)
		self.assertTrue(np.all(utils.logsumexp(logprobs, 1) < 1E-10))

		# test for consistency
		logprobs1 = srbm._ulogprob(examples_vis, examples_hid, all_pairs=True)
		logprobs3 = srbm._clogprob_hid_vis(examples_vis, examples_hid, all_pairs=True) \
		          + srbm._ulogprob_vis(examples_vis).T
		self.assertTrue(np.all(np.abs(logprobs1 - logprobs3) < 1E-10))

		rbm = RBM(srbm.X.shape[0], srbm.Y.shape[0])
		rbm.W = srbm.W
		rbm.b = srbm.b
		rbm.c = srbm.c
		srbm.L *= 0

		logprobs1 = rbm._ulogprob_vis(examples_vis)
		logprobs2 = srbm._ulogprob_vis(examples_vis)
		self.assertTrue(np.all(np.abs(logprobs1 - logprobs2) < 1E-10))

		logprobs1 = rbm._clogprob_hid_vis(examples_vis, examples_hid)
		logprobs2 = srbm._clogprob_hid_vis(examples_vis, examples_hid)
		self.assertTrue(np.all(np.abs(logprobs1 - logprobs2) < 1E-10))
	def test_ais_with_semirbm(self):
		rbm = SemiRBM(5, 20)
		rbm.L = np.matrix(np.random.randn(5, 5))
		rbm.L = np.triu(rbm.L) + np.triu(rbm.L).T - 2 * np.diag(np.diag(rbm.L))
		rbm.num_lateral_updates = 5
		rbm.sampling_method = SemiRBM.GIBBS

		ais = Estimator(rbm)

		ais_logz = ais.estimate_log_partition_function(100, np.arange(0, 1, 0.001))
		brf_logz = np.log(np.sum(np.exp(rbm._ulogprob_vis(utils.binary_numbers(rbm.X.shape[0])))))

		lower = np.log(np.exp(ais_logz) - 4 * np.sqrt(rbm._ais_var))
		upper = np.log(np.exp(ais_logz) + 4 * np.sqrt(rbm._ais_var))

		self.assertTrue(upper - lower < 1.)
		self.assertTrue(lower < brf_logz and brf_logz < upper)
示例#4
0
    def test_ais_with_semirbm(self):
        rbm = SemiRBM(5, 20)
        rbm.L = np.matrix(np.random.randn(5, 5))
        rbm.L = np.triu(rbm.L) + np.triu(rbm.L).T - 2 * np.diag(np.diag(rbm.L))
        rbm.num_lateral_updates = 5
        rbm.sampling_method = SemiRBM.GIBBS

        ais = Estimator(rbm)

        ais_logz = ais.estimate_log_partition_function(100,
                                                       np.arange(0, 1, 0.001))
        brf_logz = np.log(
            np.sum(
                np.exp(rbm._ulogprob_vis(utils.binary_numbers(
                    rbm.X.shape[0])))))

        lower = np.log(np.exp(ais_logz) - 4 * np.sqrt(rbm._ais_var))
        upper = np.log(np.exp(ais_logz) + 4 * np.sqrt(rbm._ais_var))

        self.assertTrue(upper - lower < 1.)
        self.assertTrue(lower < brf_logz and brf_logz < upper)