Ejemplo n.º 1
0
 def test_pickling(self):
     data = np.random.uniform(size=(1000, 10))
     minibatches = DataSampler(data, batchsize=50)
     gen = generator(minibatches)
     pickle.loads(pickle.dumps(gen))
     bad_gen = generator(integers())
     with pytest.raises(Exception):
         pickle.dumps(bad_gen)
Ejemplo n.º 2
0
 def test_pickling(self):
     data = np.random.uniform(size=(1000, 10))
     minibatches = DataSampler(data, batchsize=50)
     gen = generator(minibatches)
     pickle.loads(pickle.dumps(gen))
     bad_gen = generator(integers())
     with pytest.raises(Exception):
         pickle.dumps(bad_gen)
Ejemplo n.º 3
0
 def test_cloning_available(self):
     gop = generator(integers())
     res = gop**2
     shared = theano.shared(np.float32(10))
     res1 = theano.clone(res, {gop: shared})
     f = theano.function([], res1)
     assert f() == np.float32(100)
Ejemplo n.º 4
0
 def test_cloning_available(self):
     gop = generator(integers())
     res = gop ** 2
     shared = theano.shared(np.float32(10))
     res1 = theano.clone(res, {gop: shared})
     f = theano.function([], res1)
     assert f() == np.float32(100)
Ejemplo n.º 5
0
    def test_density_scaling_with_genarator(self):
        # We have different size generators

        def true_dens():
            g = gen1()
            for i, point in enumerate(g):
                yield stats.norm.logpdf(point).sum() * 10

        t = true_dens()
        # We have same size models
        with pm.Model() as model1:
            Normal('n', observed=gen1(), total_size=100)
            p1 = theano.function([], model1.logpt)

        with pm.Model() as model2:
            gen_var = generator(gen2())
            Normal('n', observed=gen_var, total_size=100)
            p2 = theano.function([], model2.logpt)

        for i in range(10):
            _1, _2, _t = p1(), p2(), next(t)
            np.testing.assert_almost_equal(_1,
                                           _t,
                                           decimal=select_by_precision(
                                               float64=7,
                                               float32=2))  # Value O(-50,000)
            np.testing.assert_almost_equal(_1, _2)
Ejemplo n.º 6
0
    def test_density_scaling_with_genarator(self):
        # We have different size generators
        def gen1():
            i = 0
            while True:
                yield np.ones((10, 100)) * i
                i += 1

        def gen2():
            i = 0
            while True:
                yield np.ones((20, 100)) * i
                i += 1

        # We have same size models
        with pm.Model() as model1:
            Normal('n', observed=gen1(), total_size=100)
            p1 = theano.function([], model1.logpt)

        with pm.Model() as model2:
            gen_var = generator(gen2())
            Normal('n', observed=gen_var, total_size=100)
            p2 = theano.function([], model2.logpt)

        # We want densities to be equal
        for _ in range(10):
            np.testing.assert_almost_equal(p1(), p2())
Ejemplo n.º 7
0
 def test_gen_cloning_with_shape_change(self):
     data = floatX(np.random.uniform(size=(1000, 10)))
     minibatches = DataSampler(data, batchsize=50)
     gen = generator(minibatches)
     gen_r = tt_rng().normal(size=gen.shape).T
     X = gen.dot(gen_r)
     res, _ = theano.scan(lambda x: x.sum(), X, n_steps=X.shape[0])
     assert res.eval().shape == (50, )
     shared = theano.shared(data)
     res2 = theano.clone(res, {gen: shared**2})
     assert res2.eval().shape == (1000, )
Ejemplo n.º 8
0
 def test_gen_cloning_with_shape_change(self):
     data = floatX(np.random.uniform(size=(1000, 10)))
     minibatches = DataSampler(data, batchsize=50)
     gen = generator(minibatches)
     gen_r = tt_rng().normal(size=gen.shape).T
     X = gen.dot(gen_r)
     res, _ = theano.scan(lambda x: x.sum(), X, n_steps=X.shape[0])
     assert res.eval().shape == (50,)
     shared = theano.shared(data)
     res2 = theano.clone(res, {gen: shared**2})
     assert res2.eval().shape == (1000,)
Ejemplo n.º 9
0
    def test_default_value(self):
        def gen():
            for i in range(2):
                yield np.ones((10, 10)) * i

        gop = generator(gen(), np.ones((10, 10)) * 10)
        f = theano.function([], gop)
        np.testing.assert_equal(np.ones((10, 10)) * 0, f())
        np.testing.assert_equal(np.ones((10, 10)) * 1, f())
        np.testing.assert_equal(np.ones((10, 10)) * 10, f())
        with pytest.raises(ValueError):
            gop.set_default(1)
Ejemplo n.º 10
0
    def test_default_value(self):
        def gen():
            for i in range(2):
                yield np.ones((10, 10)) * i

        gop = generator(gen(), np.ones((10, 10)) * 10)
        f = theano.function([], gop)
        np.testing.assert_equal(np.ones((10, 10)) * 0, f())
        np.testing.assert_equal(np.ones((10, 10)) * 1, f())
        np.testing.assert_equal(np.ones((10, 10)) * 10, f())
        with pytest.raises(ValueError):
            gop.set_default(1)
Ejemplo n.º 11
0
    def test_set_gen_and_exc(self):
        def gen():
            for i in range(2):
                yield np.ones((10, 10)) * i

        gop = generator(gen())
        f = theano.function([], gop)
        np.testing.assert_equal(np.ones((10, 10)) * 0, f())
        np.testing.assert_equal(np.ones((10, 10)) * 1, f())
        with pytest.raises(StopIteration):
            f()
        gop.set_gen(gen())
        np.testing.assert_equal(np.ones((10, 10)) * 0, f())
        np.testing.assert_equal(np.ones((10, 10)) * 1, f())
Ejemplo n.º 12
0
    def test_set_gen_and_exc(self):
        def gen():
            for i in range(2):
                yield np.ones((10, 10)) * i

        gop = generator(gen())
        f = theano.function([], gop)
        np.testing.assert_equal(np.ones((10, 10)) * 0, f())
        np.testing.assert_equal(np.ones((10, 10)) * 1, f())
        with pytest.raises(StopIteration):
            f()
        gop.set_gen(gen())
        np.testing.assert_equal(np.ones((10, 10)) * 0, f())
        np.testing.assert_equal(np.ones((10, 10)) * 1, f())
Ejemplo n.º 13
0
    def test_gradient_with_scaling(self):
        with pm.Model() as model1:
            genvar = generator(gen1())
            m = Normal('m')
            Normal('n', observed=genvar, total_size=1000)
            grad1 = theano.function([m], tt.grad(model1.logpt, m))
        with pm.Model() as model2:
            m = Normal('m')
            shavar = theano.shared(np.ones((1000, 100)))
            Normal('n', observed=shavar)
            grad2 = theano.function([m], tt.grad(model2.logpt, m))

        for i in range(10):
            shavar.set_value(np.ones((100, 100)) * i)
            g1 = grad1(1)
            g2 = grad2(1)
            np.testing.assert_almost_equal(g1, g2)
Ejemplo n.º 14
0
    def test_gradient_with_scaling(self):
        with pm.Model() as model1:
            genvar = generator(gen1())
            m = Normal('m')
            Normal('n', observed=genvar, total_size=1000)
            grad1 = theano.function([m], tt.grad(model1.logpt, m))
        with pm.Model() as model2:
            m = Normal('m')
            shavar = theano.shared(np.ones((1000, 100)))
            Normal('n', observed=shavar)
            grad2 = theano.function([m], tt.grad(model2.logpt, m))

        for i in range(10):
            shavar.set_value(np.ones((100, 100)) * i)
            g1 = grad1(1)
            g2 = grad2(1)
            np.testing.assert_almost_equal(g1, g2)
Ejemplo n.º 15
0
    def test_density_scaling_with_genarator(self):
        # We have different size generators

        def true_dens():
            g = gen1()
            for i, point in enumerate(g):
                yield stats.norm.logpdf(point).sum() * 10
        t = true_dens()
        # We have same size models
        with pm.Model() as model1:
            Normal('n', observed=gen1(), total_size=100)
            p1 = theano.function([], model1.logpt)

        with pm.Model() as model2:
            gen_var = generator(gen2())
            Normal('n', observed=gen_var, total_size=100)
            p2 = theano.function([], model2.logpt)

        for i in range(10):
            _1, _2, _t = p1(), p2(), next(t)
            np.testing.assert_almost_equal(_1, _t)
            np.testing.assert_almost_equal(_1, _2)