def test_lookup_table(): lt = LookupTable(5, 3) lt.allocate() lt.W.set_value(numpy.arange(15).reshape(5, 3).astype(theano.config.floatX)) x = tensor.lmatrix("x") y = lt.apply(x) f = theano.function([x], [y]) x_val = [[1, 2], [0, 3]] desired = numpy.array([[[3, 4, 5], [6, 7, 8]], [[0, 1, 2], [9, 10, 11]]], dtype=theano.config.floatX) assert_equal(f(x_val)[0], desired) # Test get_dim assert_equal(lt.get_dim(lt.apply.inputs[0]), 0) assert_equal(lt.get_dim(lt.apply.outputs[0]), lt.dim) assert_raises(ValueError, lt.get_dim, 'random_name') # Test feedforward interface assert lt.input_dim == 0 assert lt.output_dim == 3 lt.output_dim = 4 assert lt.output_dim == 4 def assign_input_dim(): lt.input_dim = 11 assert_raises(ValueError, assign_input_dim) lt.input_dim = 0
def build_model(self, x, config): logger.info('building %s model for: %s ', self.nn_model, self.name) vocabsize = self.get_vocab_size() logger.info('%s vocab size is: %d', self.name, vocabsize) self.embeddings, self.dim_emb = self.get_embeddings() if self.tune_tune: logger.info('%s lookuptable with size (%d, %d) will be tuned.', self.name, vocabsize, self.dim_emb) lookup = LookupTable(length=vocabsize, dim=self.dim_emb) lookup.allocate() # add_role(lookup.W, WEIGHT) lookup.W.name = 'lt.W' else: logger.info('%s lookuptable with size (%d, %d) will NOT be tuned.', self.name, vocabsize, self.dim_emb) lookup = MyLookupTable(length=vocabsize, dim=self.dim_emb) lookup.allocate() lookup.name = self.name + 'lookuptable' lookup.W.set_value(self.embeddings) xemb = lookup.apply(x) xemb = debug_print(xemb, 'xemb', False) if 'cnn' in self.nn_model: logger.info('CNN') feature_vec, feature_vec_len = create_cnn_general(xemb, self.dim_emb, self.max_len, config, self.name) elif self.nn_model == 'lstm': feature_vec, feature_vec_len = create_lstm(xemb, self.dim_emb, False, config, self.name) elif self.nn_model == 'bilstm': feature_vec, feature_vec_len = create_lstm(xemb, self.dim_emb, True, config, self.name) elif self.nn_model == 'rnn': feature_vec, feature_vec_len = create_rnn(xemb, self.dim_emb, config, self.name) elif self.nn_model == 'ff': feature_vec, feature_vec_len = create_ff(xemb, self.dim_emb, self.max_len, config) elif self.nn_model == 'mean': feature_vec, feature_vec_len = create_mean(xemb, self.dim_emb, self.max_len, config) return feature_vec, feature_vec_len
def test_lookup_table(): lt = LookupTable(5, 3) lt.allocate() lt.W.set_value(numpy.arange(15).reshape(5, 3).astype(theano.config.floatX)) x = tensor.lmatrix("x") y = lt.apply(x) f = theano.function([x], [y]) x_val = [[1, 2], [0, 3]] desired = numpy.array([[[3, 4, 5], [6, 7, 8]], [[0, 1, 2], [9, 10, 11]]], dtype=theano.config.floatX) assert_equal(f(x_val)[0], desired)
def build_model(self, x, config): logger.info('building %s model for: %s ', self.nn_model, self.name) vocabsize = self.get_vocab_size() logger.info('%s vocab size is: %d', self.name, vocabsize) self.embeddings, self.dim_emb = self.get_embeddings() if self.tune_tune: logger.info('%s lookuptable with size (%d, %d) will be tuned.', self.name, vocabsize, self.dim_emb) lookup = LookupTable(length=vocabsize, dim=self.dim_emb) lookup.allocate() # add_role(lookup.W, WEIGHT) lookup.W.name = 'lt.W' else: logger.info('%s lookuptable with size (%d, %d) will NOT be tuned.', self.name, vocabsize, self.dim_emb) lookup = MyLookupTable(length=vocabsize, dim=self.dim_emb) lookup.allocate() lookup.name = self.name + 'lookuptable' lookup.W.set_value(self.embeddings) xemb = lookup.apply(x) xemb = debug_print(xemb, 'xemb', False) if 'cnn' in self.nn_model: logger.info('CNN') feature_vec, feature_vec_len = create_cnn_general( xemb, self.dim_emb, self.max_len, config, self.name) elif self.nn_model == 'lstm': feature_vec, feature_vec_len = create_lstm(xemb, self.dim_emb, False, config, self.name) elif self.nn_model == 'bilstm': feature_vec, feature_vec_len = create_lstm(xemb, self.dim_emb, True, config, self.name) elif self.nn_model == 'rnn': feature_vec, feature_vec_len = create_rnn(xemb, self.dim_emb, config, self.name) elif self.nn_model == 'ff': feature_vec, feature_vec_len = create_ff(xemb, self.dim_emb, self.max_len, config) elif self.nn_model == 'mean': feature_vec, feature_vec_len = create_mean(xemb, self.dim_emb, self.max_len, config) return feature_vec, feature_vec_len
activation=Tanh(), weights_init=IsotropicGaussian(0.01), biases_init=Constant(0), ), ) ### Will need to reshape the rnn outputs to produce suitable input here... gather = Linear(name='hidden_to_output', input_dim=hidden_dim * 2, output_dim=labels_size, weights_init=IsotropicGaussian(0.01), biases_init=Constant(0)) p_labels = Softmax() ## Let's initialize the variables lookup.allocate() #print("lookup.parameters=", lookup.parameters) # ('lookup.parameters=', [W]) #lookup.weights_init = FUNCTION #lookup.initialize() #lookup.params[0].set_value( np.random.normal( scale = 0.1, size=(vocab_size, embedding_dim) ).astype(np.float32) ) #lookup.params[0].set_value( embedding ) # See : https://github.com/mila-udem/blocks/blob/master/tests/bricks/test_lookup.py #lookup.W.set_value(numpy.arange(15).reshape(5, 3).astype(theano.config.floatX)) lookup.W.set_value(embedding.astype(theano.config.floatX)) rnn.initialize() gather.initialize()
), ) ### Will need to reshape the rnn outputs to produce suitable input here... gather = Linear(name='hidden_to_output', input_dim=hidden_dim*2, output_dim=labels_size, weights_init=IsotropicGaussian(0.01), biases_init=Constant(0) ) p_labels = Softmax() ## Let's initialize the variables lookup.allocate() #print("lookup.parameters=", lookup.parameters) # ('lookup.parameters=', [W]) #lookup.weights_init = FUNCTION #lookup.initialize() #lookup.params[0].set_value( np.random.normal( scale = 0.1, size=(vocab_size, embedding_dim) ).astype(np.float32) ) #lookup.params[0].set_value( embedding ) # See : https://github.com/mila-udem/blocks/blob/master/tests/bricks/test_lookup.py #lookup.W.set_value(numpy.arange(15).reshape(5, 3).astype(theano.config.floatX)) lookup.W.set_value( embedding.astype(theano.config.floatX) ) rnn.initialize() gather.initialize()