def test_sample_scales(self): isa = ISA(2, 5, num_scales=4) # get a copy of subspaces subspaces = isa.subspaces() # replace scales for gsm in subspaces: gsm.scales = asarray([1., 2., 3., 4.]) isa.set_subspaces(subspaces) samples = isa.sample_prior(100000) scales = isa.sample_scales(samples) # simple sanity checks self.assertEqual(scales.shape[0], isa.num_hiddens) self.assertEqual(scales.shape[1], samples.shape[1]) priors = mean( abs(scales.flatten() - asarray([[1., 2., 3., 4.]]).T) < 0.5, 1) # prior probabilities of scales should be equal and sum up to one self.assertLess(max(abs(priors - 1. / subspaces[0].num_scales)), 0.01) self.assertLess(abs(sum(priors) - 1.), 1e-10)
def test_sample_scales(self): isa = ISA(2, 5, num_scales=4) # get a copy of subspaces subspaces = isa.subspaces() # replace scales for gsm in subspaces: gsm.scales = asarray([1., 2., 3., 4.]) isa.set_subspaces(subspaces) samples = isa.sample_prior(100000) scales = isa.sample_scales(samples) # simple sanity checks self.assertEqual(scales.shape[0], isa.num_hiddens) self.assertEqual(scales.shape[1], samples.shape[1]) priors = mean(abs(scales.flatten() - asarray([[1., 2., 3., 4.]]).T) < 0.5, 1) # prior probabilities of scales should be equal and sum up to one self.assertLess(max(abs(priors - 1. / subspaces[0].num_scales)), 0.01) self.assertLess(abs(sum(priors) - 1.), 1e-10)
def test_evaluate(self): isa1 = ISA(2) isa1.A = eye(2) subspaces = isa1.subspaces() for gsm in subspaces: gsm.scales = ones(gsm.num_scales) isa1.set_subspaces(subspaces) # equivalent overcomplete model isa2 = ISA(2, 4) A = copy(isa2.A) A[:, :2] = isa1.A / sqrt(2.) A[:, 2:] = isa1.A / sqrt(2.) isa2.A = A subspaces = isa2.subspaces() for gsm in subspaces: gsm.scales = ones(gsm.num_scales) isa2.set_subspaces(subspaces) data = isa1.sample(100) # the results should not depend on the parameters ll1 = isa1.evaluate(data) ll2 = isa2.evaluate(data) self.assertLess(abs(ll1 - ll2), 1e-5) isa1 = ISA(2) isa1.initialize() # equivalent overcomplete model isa2 = ISA(2, 4) isa2.set_subspaces(isa1.subspaces() * 2) A = isa2.basis() A[:, :2] = isa1.basis() A[:, 2:] = 0. isa2.set_basis(A) data = isa1.sample(100) params = isa2.default_parameters() params['ais']['num_iter'] = 100 params['ais']['num_samples'] = 100 ll1 = isa1.evaluate(data) ll2 = isa2.evaluate(data, params) self.assertLess(abs(ll1 - ll2), 0.1)