def test_default_updates_multiple(self): x = shared(0) y = shared(1) x.default_update = x - 1 y.default_update = y + 1 f1 = pfunc([], [x, y]) f1() assert x.get_value() == -1 assert y.get_value() == 2 f2 = pfunc([], [x, y], updates=[(x, (x - 2))], no_default_updates=[y]) f2() assert x.get_value() == -3 assert y.get_value() == 2 f3 = pfunc([], [x, y], updates=[(x, (x - 2))], no_default_updates=True) f3() assert x.get_value() == -5 assert y.get_value() == 2 f4 = pfunc([], [x, y], updates=[(y, (y - 2))]) f4() assert x.get_value() == -6 assert y.get_value() == 0
def test_doc(self): """Ensure the code given in pfunc.txt works as expected""" # Example #1. a = lscalar() b = shared(1) f1 = pfunc([a], (a + b)) f2 = pfunc([In(a, value=44)], a + b, updates={b: b + 1}) self.assertTrue(b.get_value() == 1) self.assertTrue(f1(3) == 4) self.assertTrue(f2(3) == 4) self.assertTrue(b.get_value() == 2) self.assertTrue(f1(3) == 5) b.set_value(0) self.assertTrue(f1(3) == 3) # Example #2. a = tensor.lscalar() b = shared(7) f1 = pfunc([a], a + b) f2 = pfunc([a], a * b) self.assertTrue(f1(5) == 12) b.set_value(8) self.assertTrue(f1(5) == 13) self.assertTrue(f2(4) == 32)
def test_no_default_updates(self): x = shared(0) y = shared(1) x.default_update = x + 2 # Test that the default update is taken into account in the right cases f1 = pfunc([], [x], no_default_updates=True) f1() assert x.get_value() == 0 f2 = pfunc([], [x], no_default_updates=[x]) f2() assert x.get_value() == 0 f3 = pfunc([], [x], no_default_updates=[x, y]) f3() assert x.get_value() == 0 f4 = pfunc([], [x], no_default_updates=[y]) f4() assert x.get_value() == 2 f5 = pfunc([], [x], no_default_updates=[]) f5() assert x.get_value() == 4 f5 = pfunc([], [x], no_default_updates=False) f5() assert x.get_value() == 6 self.assertRaises(TypeError, pfunc, [], [x], no_default_updates=(x)) self.assertRaises(TypeError, pfunc, [], [x], no_default_updates=x) self.assertRaises(TypeError, pfunc, [], [x], no_default_updates='canard') # Mix explicit updates and no_default_updates g1 = pfunc([], [x], updates=[(x, (x - 1))], no_default_updates=True) g1() assert x.get_value() == 5 g2 = pfunc([], [x], updates=[(x, (x - 1))], no_default_updates=[x]) g2() assert x.get_value() == 4 g3 = pfunc([], [x], updates=[(x, (x - 1))], no_default_updates=[x, y]) g3() assert x.get_value() == 3 g4 = pfunc([], [x], updates=[(x, (x - 1))], no_default_updates=[y]) g4() assert x.get_value() == 2 g5 = pfunc([], [x], updates=[(x, (x - 1))], no_default_updates=[]) g5() assert x.get_value() == 1 g5 = pfunc([], [x], updates=[(x, (x - 1))], no_default_updates=False) g5() assert x.get_value() == 0
def test_doc(self): # Ensure the code given in pfunc.txt works as expected # Example #1. a = lscalar() b = shared(1) f1 = pfunc([a], (a + b)) f2 = pfunc([In(a, value=44)], a + b, updates={b: b + 1}) assert b.get_value() == 1 assert f1(3) == 4 assert f2(3) == 4 assert b.get_value() == 2 assert f1(3) == 5 b.set_value(0) assert f1(3) == 3 # Example #2. a = tensor.lscalar() b = shared(7) f1 = pfunc([a], a + b) f2 = pfunc([a], a * b) assert f1(5) == 12 b.set_value(8) assert f1(5) == 13 assert f2(4) == 32
def test_doc(self): # Ensure the code given in pfunc.txt works as expected # Example #1. a = lscalar() b = shared(1) f1 = pfunc([a], (a + b)) f2 = pfunc([In(a, value=44)], a + b, updates={b: b + 1}) self.assertTrue(b.get_value() == 1) self.assertTrue(f1(3) == 4) self.assertTrue(f2(3) == 4) self.assertTrue(b.get_value() == 2) self.assertTrue(f1(3) == 5) b.set_value(0) self.assertTrue(f1(3) == 3) # Example #2. a = tensor.lscalar() b = shared(7) f1 = pfunc([a], a + b) f2 = pfunc([a], a * b) self.assertTrue(f1(5) == 12) b.set_value(8) self.assertTrue(f1(5) == 13) self.assertTrue(f2(4) == 32)
def new(cls, input, n_in, n_out, dtype=None, name=None): if dtype is None: dtype = input.dtype if name is None: name = cls.__name__ w = shared(np.zeros((n_in, n_out), dtype=dtype), name='%s.w'%name) b = shared(np.zeros((n_out,), dtype=dtype), name='%s.b'%name) return cls(input, w, b, params=[w,b])
def test_clone0(self): x = shared(np.asarray([4, 4, 4])) y = shared(np.asarray([4, 4, 4])) z = shared(np.asarray([2, 2, 2])) up = pfunc( [], [], updates={x: (x * 5), y: ((x * 5) + y), z: (((x * 5) + y) ** z)} ) up() assert np.all(x.get_value() == 20) assert np.all(y.get_value() == 24) assert np.all(z.get_value() == (24 ** 2))
def test_clone0(self): x = shared(numpy.asarray([4, 4, 4])) y = shared(numpy.asarray([4, 4, 4])) z = shared(numpy.asarray([2, 2, 2])) up = pfunc([], [], updates={ x: (x * 5), y: ((x * 5) + y), z: (((x * 5) + y) ** z)}) up() assert numpy.all(x.get_value() == 20) assert numpy.all(y.get_value() == 24) assert numpy.all(z.get_value() == (24 ** 2))
def test_shared_mutable(self): bval = np.arange(5) b = shared(bval) b_out = b * 2 # shared vars copy args. assert b.get_value(borrow=True) is not bval # so we do this to get at the underlying data bval = data_of(b) # by default, shared are not mutable unless doing an explicit update f = pfunc([], [b_out], mode="FAST_RUN") assert (f() == np.arange(5) * 2).all() assert np.all(b.get_value(borrow=True) == np.arange(5)) # using updates, b is now a mutable parameter f = pfunc([], [b_out], updates=[(b, b_out)], mode="FAST_RUN") assert (f() == (np.arange(5) * 2)).all() # because of the update assert (b.get_value(borrow=True) == (np.arange(5) * 2)).all() assert (bval == (np.arange(5) * 2)).all() # because of mutable=True # do not depend on updates being in-place though! bval = np.arange(5) b.set_value(bval, borrow=True) bval = data_of(b) f = pfunc([], [b_out], updates=[(b, (b_out + 3))], mode="FAST_RUN") assert (f() == (np.arange(5) * 2)).all() # because of the update assert (b.get_value(borrow=True) == ((np.arange(5) * 2) + 3)).all() # bval got modified to something... assert not (bval == np.arange(5)).all() # ... but not to b.value ! assert not (bval == b.get_value(borrow=True)).all()
def test_shared(self): # CHECK: two functions (f1 and f2) can share w w = shared(numpy.random.rand(2, 2), 'w') wval = w.get_value(borrow=False) x = dmatrix() out1 = w + x out2 = w * x f1 = pfunc([x], [out1]) f2 = pfunc([x], [out2]) xval = numpy.random.rand(2, 2) assert numpy.all(f1(xval) == xval + wval) assert numpy.all(f2(xval) == xval * wval) # CHECK: updating a shared value f3 = pfunc([x], out1, updates=[(w, (w - 1))]) # f3 changes the value of w assert numpy.all(f3(xval) == xval + wval) # this same value is read by f1 assert numpy.all(f1(xval) == xval + (wval - 1)) w.set_value(w.get_value(borrow=True) * 10, borrow=True) # this same value is read by f1 assert numpy.all(f1(xval) == xval + w.get_value(borrow=True))
def test_shared_mutable(self): bval = numpy.arange(5) b = shared(bval) b_out = b * 2 # shared vars copy args. assert b.get_value(borrow=True) is not bval # so we do this to get at the underlying data bval = data_of(b) # by default, shared are not mutable unless doing an explicit update f = pfunc([], [b_out], mode='FAST_RUN') assert (f() == numpy.arange(5) * 2).all() assert numpy.all(b.get_value(borrow=True) == numpy.arange(5)) # using updates, b is now a mutable parameter f = pfunc([], [b_out], updates=[(b, b_out)], mode='FAST_RUN') assert (f() == (numpy.arange(5) * 2)).all() # because of the update assert (b.get_value(borrow=True) == (numpy.arange(5) * 2)).all() assert (bval == (numpy.arange(5) * 2)).all() # because of mutable=True # do not depend on updates being in-place though! bval = numpy.arange(5) b.set_value(bval, borrow=True) bval = data_of(b) f = pfunc([], [b_out], updates=[(b, (b_out + 3))], mode='FAST_RUN') assert (f() == (numpy.arange(5) * 2)).all() # because of the update assert (b.get_value(borrow=True) == ((numpy.arange(5) * 2) + 3)).all() # bval got modified to something... assert not (bval == numpy.arange(5)).all() # ... but not to b.value ! assert not (bval == b.get_value(borrow=True)).all()
def test_shared(self): # CHECK: two functions (f1 and f2) can share w w = shared(np.random.rand(2, 2), "w") wval = w.get_value(borrow=False) x = dmatrix() out1 = w + x out2 = w * x f1 = pfunc([x], [out1]) f2 = pfunc([x], [out2]) xval = np.random.rand(2, 2) assert np.all(f1(xval) == xval + wval) assert np.all(f2(xval) == xval * wval) # CHECK: updating a shared value f3 = pfunc([x], out1, updates=[(w, (w - 1))]) # f3 changes the value of w assert np.all(f3(xval) == xval + wval) # this same value is read by f1 assert np.all(f1(xval) == xval + (wval - 1)) w.set_value(w.get_value(borrow=True) * 10, borrow=True) # this same value is read by f1 assert np.all(f1(xval) == xval + w.get_value(borrow=True))
def test_givens_replaces_shared_variable2(self): a = shared(1., 'a') a.default_update = a + 3 c = a + 10 f = pfunc([], c, givens={a: (a + 10)}) assert f() == 21 assert f() == 34
def test_default_scalar_container(self): # Similar in spirit to test_default_container, but updating a scalar # variable. This is a sanity check for non mutable types. x = shared(0.0, "x") f = pfunc([], x) assert f() == 0 x.set_value(x.get_value(borrow=True) + 1, borrow=True) assert f() == 1
def test_default_scalar_container(self): # Similar in spirit to test_default_container, but updating a scalar # variable. This is a sanity check for non mutable types. x = shared(0.0, 'x') f = pfunc([], x) assert f() == 0 x.set_value(x.get_value(borrow=True) + 1, borrow=True) assert f() == 1
def test_update_equiv(self): # Like test_update_same, but the update expression is simplified until # it is found to be equal to the original variable a = shared(1.0, "a") b = shared(np.ones((2, 3)), "b") # See comment in test_update_same about why we try both # shared variables. f = theano.function([], [], updates=[(a, a), (b, (2 * b - b))]) g = theano.function([], [], updates=[(a, (a * 2 - a)), (b, b)]) f() assert a.get_value(borrow=True).shape == (), a.get_value() assert b.get_value(borrow=True).shape == (2, 3), b.get_value() g() assert a.get_value(borrow=True).shape == (), a.get_value() assert b.get_value(borrow=True).shape == (2, 3), b.get_value()
def test_update_equiv(self): # Like test_update_same, but the update expression is simplified until # it is found to be equal to the original variable a = shared(1., 'a') b = shared(numpy.ones((2, 3)), 'b') # See comment in test_update_same about why we try both # shared variables. f = theano.function([], [], updates=[(a, a), (b, (2 * b - b))]) g = theano.function([], [], updates=[(a, (a * 2 - a)), (b, b)]) f() assert a.get_value(borrow=True).shape == (), a.get_value() assert b.get_value(borrow=True).shape == (2, 3), b.get_value() g() assert a.get_value(borrow=True).shape == (), a.get_value() assert b.get_value(borrow=True).shape == (2, 3), b.get_value()
def test_givens_replaces_shared_variable2(self): a = shared(1.0, "a") a.default_update = a + 3 c = a + 10 f = pfunc([], c, givens={a: (a + 10)}) assert f() == 21 assert f() == 34
def __init__(self, window_size=HYPERPARAMETERS["WINDOW_SIZE"], vocab_size=vocabulary.wordmap.len, embedding_size=HYPERPARAMETERS["EMBEDDING_SIZE"], hidden_size=HYPERPARAMETERS["HIDDEN_SIZE"], seed=miscglobals.RANDOMSEED): """ Initialize L{Model} parameters. """ self.vocab_size = vocab_size self.window_size = window_size self.embedding_size = embedding_size if LBL: self.hidden_size = hidden_size self.output_size = self.embedding_size else: self.hidden_size = hidden_size self.output_size = 1 import numpy import hyperparameters numpy.random.seed(seed) self.embeddings = numpy.asarray( (numpy.random.rand(self.vocab_size, HYPERPARAMETERS["EMBEDDING_SIZE"]) - 0.5) * 2 * HYPERPARAMETERS["INITIAL_EMBEDDING_RANGE"], dtype=floatX) if HYPERPARAMETERS["NORMALIZE_EMBEDDINGS"]: self.normalize(range(self.vocab_size)) if LBL: self.output_weights = shared( numpy.asarray(random_weights( self.input_size, self.output_size, scale_by=HYPERPARAMETERS["SCALE_INITIAL_WEIGHTS_BY"]), dtype=floatX)) self.output_biases = shared( numpy.asarray(numpy.zeros((1, self.output_size)), dtype=floatX)) self.score_biases = shared( numpy.asarray(numpy.zeros(self.vocab_size), dtype=floatX)) else: self.hidden_weights = shared( numpy.asarray(random_weights( self.input_size, self.hidden_size, scale_by=HYPERPARAMETERS["SCALE_INITIAL_WEIGHTS_BY"]), dtype=floatX)) self.output_weights = shared( numpy.asarray(random_weights( self.hidden_size, self.output_size, scale_by=HYPERPARAMETERS["SCALE_INITIAL_WEIGHTS_BY"]), dtype=floatX)) self.hidden_biases = shared( numpy.asarray(numpy.zeros((self.hidden_size, )), dtype=floatX)) self.output_biases = shared( numpy.asarray(numpy.zeros((self.output_size, )), dtype=floatX))
def test_givens_replaces_shared_variable(self): a = shared(1., 'a') a.default_update = a + 3. b = tensor.dscalar('b') c = a + 10 f = pfunc([b], c, givens={a: b}) assert len(f.maker.fgraph.inputs) == 1 assert len(f.maker.fgraph.outputs) == 1
def test_default_updates_partial_graph(self): a = shared(0) a.default_update = a + 1 # Increment a each time it is used b = 2 * a # Use only the tip of the graph, a is not used f = pfunc([b], b) assert a.get_value() == 0 f(21) assert a.get_value() == 0
def test_update_err_broadcast(self): # Test that broadcastable dimensions raise error data = numpy.random.rand(10, 10).astype('float32') output_var = shared(name="output", value=data) # the update_var has type matrix, and the update expression # is a broadcasted scalar, and that should be allowed. self.assertRaises(TypeError, theano.function, inputs=[], outputs=[], updates={output_var: output_var.sum().dimshuffle('x', 'x')})
def test_no_shared_as_input(self): # Test that shared variables cannot be used as function inputs. w_init = np.random.rand(2, 2) w = shared(w_init.copy(), "w") with pytest.raises( TypeError, match=r"^Cannot use a shared variable \(w\) as explicit input" ): pfunc([w], theano.tensor.sum(w * w))
def test_givens_replaces_shared_variable(self): a = shared(1.0, "a") a.default_update = a + 3.0 b = tensor.dscalar("b") c = a + 10 f = pfunc([b], c, givens={a: b}) assert len(f.maker.fgraph.inputs) == 1 assert len(f.maker.fgraph.outputs) == 1
def test_default_updates_expressions(self): x = shared(0) y = shared(1) a = lscalar("a") z = a * x x.default_update = x + y f1 = pfunc([a], z) f1(12) assert x.get_value() == 1 f2 = pfunc([a], z, no_default_updates=True) assert f2(7) == 7 assert x.get_value() == 1 f3 = pfunc([a], z, no_default_updates=[x]) assert f3(9) == 9 assert x.get_value() == 1
def test_default_updates_expressions(self): x = shared(0) y = shared(1) a = lscalar('a') z = a * x x.default_update = x + y f1 = pfunc([a], z) f1(12) assert x.get_value() == 1 f2 = pfunc([a], z, no_default_updates=True) assert f2(7) == 7 assert x.get_value() == 1 f3 = pfunc([a], z, no_default_updates=[x]) assert f3(9) == 9 assert x.get_value() == 1
def test_no_shared_as_input(self): # Test that shared variables cannot be used as function inputs. w_init = np.random.rand(2, 2) w = shared(w_init.copy(), "w") try: pfunc([w], theano.tensor.sum(w * w)) assert False except TypeError as e: msg = "Cannot use a shared variable (w) as explicit input" if str(e).find(msg) < 0: raise
def test_no_shared_as_input(self): """Test that shared variables cannot be used as function inputs.""" w_init = numpy.random.rand(2, 2) w = shared(w_init.copy(), 'w') try: pfunc([w], theano.tensor.sum(w * w)) assert False except TypeError as e: msg = 'Cannot use a shared variable (w) as explicit input' if str(e).find(msg) < 0: raise
def test_update(self): """Test update mechanism in different settings.""" # Simple value assignment. x = shared(0) assign = pfunc([], [], updates={x: 3}) assign() self.assertTrue(x.get_value() == 3) # Basic increment function. x.set_value(0) inc = pfunc([], [], updates={x: x + 1}) inc() self.assertTrue(x.get_value() == 1) # Increment by a constant value. x.set_value(-1) y = shared(2) inc_by_y = pfunc([], [], updates={x: x + y}) inc_by_y() self.assertTrue(x.get_value() == 1)
def test_update(self): # Test update mechanism in different settings. # Simple value assignment. x = shared(0) assign = pfunc([], [], updates={x: 3}) assign() assert x.get_value() == 3 # Basic increment function. x.set_value(0) inc = pfunc([], [], updates={x: x + 1}) inc() assert x.get_value() == 1 # Increment by a constant value. x.set_value(-1) y = shared(2) inc_by_y = pfunc([], [], updates={x: x + y}) inc_by_y() assert x.get_value() == 1
def test_default_updates_input(self): x = shared(0) y = shared(1) if theano.configdefaults.python_int_bitwidth() == 32: a = iscalar("a") else: a = lscalar("a") x.default_update = y y.default_update = y + a f1 = pfunc([], x, no_default_updates=True) f1() assert x.get_value() == 0 assert y.get_value() == 1 f2 = pfunc([], x, no_default_updates=[x]) f2() assert x.get_value() == 0 assert y.get_value() == 1 f3 = pfunc([], x, no_default_updates=[y]) f3() assert x.get_value() == 1 assert y.get_value() == 1 f4 = pfunc([a], x) f4(2) assert x.get_value() == 1 assert y.get_value() == 3 f5 = pfunc([], x, updates={y: (y - 1)}) f5() assert x.get_value() == 3 assert y.get_value() == 2 # a is needed as input if y.default_update is used with pytest.raises(theano.gof.MissingInputError): pfunc([], x)
def test_update_err_broadcast(self): # Test that broadcastable dimensions raise error data = np.random.rand(10, 10).astype("float32") output_var = shared(name="output", value=data) # the update_var has type matrix, and the update expression # is a broadcasted scalar, and that should be allowed. with pytest.raises(TypeError): theano.function( inputs=[], outputs=[], updates={output_var: output_var.sum().dimshuffle("x", "x")}, )
def test_default_updates_chained(self): x = shared(2) y = shared(1) z = shared(-1) x.default_update = x - y y.default_update = z z.default_update = z - 1 f1 = pfunc([], [x]) f1() assert x.get_value() == 1 assert y.get_value() == -1 assert z.get_value() == -2 f2 = pfunc([], [x, y]) f2() assert x.get_value() == 2 assert y.get_value() == -2 assert z.get_value() == -3 f3 = pfunc([], [y]) f3() assert x.get_value() == 2 assert y.get_value() == -3 assert z.get_value() == -4 f4 = pfunc([], [x, y], no_default_updates=[x]) f4() assert x.get_value() == 2 assert y.get_value() == -4 assert z.get_value() == -5 f5 = pfunc([], [x, y, z], no_default_updates=[z]) f5() assert x.get_value() == 6 assert y.get_value() == -5 assert z.get_value() == -5
def test_default_updates_input(self): x = shared(0) y = shared(1) if theano.configdefaults.python_int_bitwidth() == 32: a = iscalar('a') else: a = lscalar('a') x.default_update = y y.default_update = y + a f1 = pfunc([], x, no_default_updates=True) f1() assert x.get_value() == 0 assert y.get_value() == 1 f2 = pfunc([], x, no_default_updates=[x]) f2() assert x.get_value() == 0 assert y.get_value() == 1 f3 = pfunc([], x, no_default_updates=[y]) f3() assert x.get_value() == 1 assert y.get_value() == 1 f4 = pfunc([a], x) f4(2) assert x.get_value() == 1 assert y.get_value() == 3 f5 = pfunc([], x, updates={y: (y - 1)}) f5() assert x.get_value() == 3 assert y.get_value() == 2 # a is needed as input if y.default_update is used self.assertRaises(theano.gof.MissingInputError, pfunc, [], x)
def test_default_container(self): # Ensure it is possible to (implicitly) use a shared variable in a # function, as a 'state' that can be updated at will. rng = numpy.random.RandomState(1827) w_init = rng.rand(5) w = shared(w_init.copy(), 'w') reg = theano.tensor.sum(w * w) f = pfunc([], reg) assert f() == numpy.sum(w_init * w_init) # Change the value of w and ensure the output changes accordingly. w.set_value(w.get_value(borrow=True) + 1.0, borrow=True) assert f() == numpy.sum((w_init + 1) ** 2)
def test_default_container(self): # Ensure it is possible to (implicitly) use a shared variable in a # function, as a 'state' that can be updated at will. rng = np.random.RandomState(1827) w_init = rng.rand(5) w = shared(w_init.copy(), "w") reg = theano.tensor.sum(w * w) f = pfunc([], reg) assert f() == np.sum(w_init * w_init) # Change the value of w and ensure the output changes accordingly. w.set_value(w.get_value(borrow=True) + 1.0, borrow=True) assert f() == np.sum((w_init + 1) ** 2)
def test_default_updates(self): x = shared(0) x.default_update = x + 1 f = pfunc([], [x]) f() assert x.get_value() == 1 del x.default_update f() assert x.get_value() == 2 g = pfunc([], [x]) g() assert x.get_value() == 2
def test_update_same(self): # There was a bug in CVM, triggered when a shared variable # was its own update expression. a = shared(1., 'a') b = shared(numpy.ones((2, 3)), 'b') # The order of the variables is not determined, so we try # both shared variables. # TODO: explain the above comment. By "not determined" does # this mean "not deterministic"? # This test originally wrote the updates using dictionaries, # and iterating over the dictionary was not deterministic. # Is that all the comment above meant, or is the CVM intended # to add extra non-determinism? Or is the CVM meant to # deterministically but arbitrarily pick an order for the updates? f = theano.function([], [], updates=[(a, a), (b, (2 * b))]) g = theano.function([], [], updates=[(a, (a * 2)), (b, b)]) f() assert a.get_value(borrow=True).shape == (), a.get_value() assert b.get_value(borrow=True).shape == (2, 3), b.get_value() g() assert a.get_value(borrow=True).shape == (), a.get_value() assert b.get_value(borrow=True).shape == (2, 3), b.get_value()
def test_update_same(self): # There was a bug in CVM, triggered when a shared variable # was its own update expression. a = shared(1.0, "a") b = shared(np.ones((2, 3)), "b") # The order of the variables is not determined, so we try # both shared variables. # TODO: explain the above comment. By "not determined" does # this mean "not deterministic"? # This test originally wrote the updates using dictionaries, # and iterating over the dictionary was not deterministic. # Is that all the comment above meant, or is the CVM intended # to add extra non-determinism? Or is the CVM meant to # deterministically but arbitrarily pick an order for the updates? f = theano.function([], [], updates=[(a, a), (b, (2 * b))]) g = theano.function([], [], updates=[(a, (a * 2)), (b, b)]) f() assert a.get_value(borrow=True).shape == (), a.get_value() assert b.get_value(borrow=True).shape == (2, 3), b.get_value() g() assert a.get_value(borrow=True).shape == (), a.get_value() assert b.get_value(borrow=True).shape == (2, 3), b.get_value()
def test_givens(self): x = shared(0) assign = pfunc([], x, givens={x: 3}) assert assign() == 3 assert x.get_value(borrow=True) == 0 y = tensor.ivector() f = pfunc([y], (y * x), givens={x: 6}) assert np.all(f([1, 1, 1]) == [6, 6, 6]) assert x.get_value() == 0 z = tensor.ivector() c = z * y f = pfunc([y], (c + 7), givens={z: theano._asarray([4, 4, 4], dtype="int32")}) assert np.all(f([1, 1, 1]) == [11, 11, 11]) assert x.get_value() == 0
def __init__(self, window_size, vocab_size, embedding_size, hidden_size, seed, initial_embeddings, two_hidden_layers): """ Initialize L{Model} parameters. """ self.vocab_size = vocab_size self.window_size = window_size self.embedding_size = embedding_size self.two_hidden_layers = two_hidden_layers if LBL: self.hidden_size = hidden_size self.output_size = self.embedding_size else: self.hidden_size = hidden_size self.output_size = 1 import numpy import hyperparameters numpy.random.seed(seed) if initial_embeddings is None: self.embeddings = numpy.asarray((numpy.random.rand(self.vocab_size, HYPERPARAMETERS["EMBEDDING_SIZE"]) - 0.5)*2 * HYPERPARAMETERS["INITIAL_EMBEDDING_RANGE"], dtype=floatX) else: assert initial_embeddings.shape == (self.vocab_size, HYPERPARAMETERS["EMBEDDING_SIZE"]) self.embeddings = copy.copy(initial_embeddings) if HYPERPARAMETERS["NORMALIZE_EMBEDDINGS"]: self.normalize(range(self.vocab_size)) if LBL: self.output_weights = shared(numpy.asarray(random_weights(self.input_size, self.output_size, scale_by=HYPERPARAMETERS["SCALE_INITIAL_WEIGHTS_BY"]), dtype=floatX)) self.output_biases = shared(numpy.asarray(numpy.zeros((1, self.output_size)), dtype=floatX)) self.score_biases = shared(numpy.asarray(numpy.zeros(self.vocab_size), dtype=floatX)) assert not self.two_hidden_layers else: self.hidden_weights = shared(numpy.asarray(random_weights(self.input_size, self.hidden_size, scale_by=HYPERPARAMETERS["SCALE_INITIAL_WEIGHTS_BY"]), dtype=floatX)) self.hidden_biases = shared(numpy.asarray(numpy.zeros((self.hidden_size,)), dtype=floatX)) if self.two_hidden_layers: self.hidden2_weights = shared(numpy.asarray(random_weights(self.hidden_size, self.hidden_size, scale_by=HYPERPARAMETERS["SCALE_INITIAL_WEIGHTS_BY"]), dtype=floatX)) self.hidden2_biases = shared(numpy.asarray(numpy.zeros((self.hidden_size,)), dtype=floatX)) self.output_weights = shared(numpy.asarray(random_weights(self.hidden_size, self.output_size, scale_by=HYPERPARAMETERS["SCALE_INITIAL_WEIGHTS_BY"]), dtype=floatX)) self.output_biases = shared(numpy.asarray(numpy.zeros((self.output_size,)), dtype=floatX))
def test_givens(self): x = shared(0) assign = pfunc([], x, givens={x: 3}) assert assign() == 3 assert x.get_value(borrow=True) == 0 y = tensor.ivector() f = pfunc([y], (y * x), givens={x: 6}) assert numpy.all(f([1, 1, 1]) == [6, 6, 6]) assert x.get_value() == 0 z = tensor.ivector() c = z * y f = pfunc([y], (c + 7), givens={z: theano._asarray([4, 4, 4], dtype='int32')}) assert numpy.all(f([1, 1, 1]) == [11, 11, 11]) assert x.get_value() == 0
def test_param_strict(self): a = tensor.dvector() b = shared(7) out = a + b f = pfunc([In(a, strict=False)], [out]) # works, rand generates float64 by default f(numpy.random.rand(8)) # works, casting is allowed f(numpy.array([1, 2, 3, 4], dtype='int32')) f = pfunc([In(a, strict=True)], [out]) try: # fails, f expects float64 f(numpy.array([1, 2, 3, 4], dtype='int32')) except TypeError: pass
def test_param_strict(self): a = tensor.dvector() b = shared(7) out = a + b f = pfunc([In(a, strict=False)], [out]) # works, rand generates float64 by default f(np.random.rand(8)) # works, casting is allowed f(np.array([1, 2, 3, 4], dtype="int32")) f = pfunc([In(a, strict=True)], [out]) try: # fails, f expects float64 f(np.array([1, 2, 3, 4], dtype="int32")) except TypeError: pass
def _shared_uniform(rng, low, high, size, dtype, name=None): return shared(theano._asarray(rng.uniform(low=low, high=high, size=size), dtype=dtype), name)
def _shared_uniform(rng, low, high, size, dtype, name=None): return shared( theano._asarray(rng.uniform(low=low, high=high, size=size), dtype=dtype), name)
def __init__(self, window_size, vocab_size, embedding_size, hidden_size, seed, initial_embeddings, two_hidden_layers): """ Initialize L{Model} parameters. """ self.vocab_size = vocab_size self.window_size = window_size self.embedding_size = embedding_size self.two_hidden_layers = two_hidden_layers if LBL: self.hidden_size = hidden_size self.output_size = self.embedding_size else: self.hidden_size = hidden_size self.output_size = 1 import numpy import hyperparameters numpy.random.seed(seed) if initial_embeddings is None: self.embeddings = numpy.asarray( (numpy.random.rand(self.vocab_size, HYPERPARAMETERS["EMBEDDING_SIZE"]) - 0.5) * 2 * HYPERPARAMETERS["INITIAL_EMBEDDING_RANGE"], dtype=floatX) else: assert initial_embeddings.shape == ( self.vocab_size, HYPERPARAMETERS["EMBEDDING_SIZE"]) self.embeddings = copy.copy(initial_embeddings) if HYPERPARAMETERS["NORMALIZE_EMBEDDINGS"]: self.normalize(range(self.vocab_size)) if LBL: self.output_weights = shared( numpy.asarray(random_weights( self.input_size, self.output_size, scale_by=HYPERPARAMETERS["SCALE_INITIAL_WEIGHTS_BY"]), dtype=floatX)) self.output_biases = shared( numpy.asarray(numpy.zeros((1, self.output_size)), dtype=floatX)) self.score_biases = shared( numpy.asarray(numpy.zeros(self.vocab_size), dtype=floatX)) assert not self.two_hidden_layers else: self.hidden_weights = shared( numpy.asarray(random_weights( self.input_size, self.hidden_size, scale_by=HYPERPARAMETERS["SCALE_INITIAL_WEIGHTS_BY"]), dtype=floatX)) self.hidden_biases = shared( numpy.asarray(numpy.zeros((self.hidden_size, )), dtype=floatX)) if self.two_hidden_layers: self.hidden2_weights = shared( numpy.asarray(random_weights( self.hidden_size, self.hidden_size, scale_by=HYPERPARAMETERS["SCALE_INITIAL_WEIGHTS_BY"]), dtype=floatX)) self.hidden2_biases = shared( numpy.asarray(numpy.zeros((self.hidden_size, )), dtype=floatX)) self.output_weights = shared( numpy.asarray(random_weights( self.hidden_size, self.output_size, scale_by=HYPERPARAMETERS["SCALE_INITIAL_WEIGHTS_BY"]), dtype=floatX)) self.output_biases = shared( numpy.asarray(numpy.zeros((self.output_size, )), dtype=floatX))
def test_duplicate_updates(self): x, y = dmatrices('x', 'y') z = shared(numpy.ones((2, 3))) self.assertRaises(ValueError, theano.function, [x, y], [z], updates=[(z, (z + x + y)), (z, (z - x))])
def test_duplicate_updates(self): x, y = dmatrices("x", "y") z = shared(np.ones((2, 3))) with pytest.raises(ValueError): theano.function([x, y], [z], updates=[(z, (z + x + y)), (z, (z - x))])
def __init__( self, window_size=HYPERPARAMETERS["WINDOW_SIZE"], vocab_size=vocabulary.wordmap.len, embedding_size=HYPERPARAMETERS["EMBEDDING_SIZE"], hidden_size=HYPERPARAMETERS["HIDDEN_SIZE"], seed=miscglobals.RANDOMSEED, ): """ Initialize L{Model} parameters. """ self.vocab_size = vocab_size self.window_size = window_size self.embedding_size = embedding_size if LBL: self.hidden_size = hidden_size self.output_size = self.embedding_size else: self.hidden_size = hidden_size self.output_size = 1 import numpy import hyperparameters numpy.random.seed(seed) self.embeddings = numpy.asarray( (numpy.random.rand(self.vocab_size, HYPERPARAMETERS["EMBEDDING_SIZE"]) - 0.5) * 2 * HYPERPARAMETERS["INITIAL_EMBEDDING_RANGE"], dtype=floatX, ) if HYPERPARAMETERS["NORMALIZE_EMBEDDINGS"]: self.normalize(range(self.vocab_size)) if LBL: self.output_weights = shared( numpy.asarray( random_weights( self.input_size, self.output_size, scale_by=HYPERPARAMETERS["SCALE_INITIAL_WEIGHTS_BY"] ), dtype=floatX, ) ) self.output_biases = shared(numpy.asarray(numpy.zeros((1, self.output_size)), dtype=floatX)) self.score_biases = shared(numpy.asarray(numpy.zeros(self.vocab_size), dtype=floatX)) else: self.hidden_weights = shared( numpy.asarray( random_weights( self.input_size, self.hidden_size, scale_by=HYPERPARAMETERS["SCALE_INITIAL_WEIGHTS_BY"] ), dtype=floatX, ) ) self.output_weights = shared( numpy.asarray( random_weights( self.hidden_size, self.output_size, scale_by=HYPERPARAMETERS["SCALE_INITIAL_WEIGHTS_BY"] ), dtype=floatX, ) ) self.hidden_biases = shared(numpy.asarray(numpy.zeros((self.hidden_size,)), dtype=floatX)) self.output_biases = shared(numpy.asarray(numpy.zeros((self.output_size,)), dtype=floatX))