def main(batch_size=3): import random from recnn_util import load_data train_trees, dev_trees, test_trees, token2id = load_data( "data/stanford_sentiment_treebank.pkl") sys.stderr.write("Data load done") batch_number = len(train_trees) / batch_size x = T.imatrix('x') y = T.ivector('y') model = RNTN( x, y, vocab_size=len(token2id), embed_dim=10, label_n=5, ) sys.stderr.write("Model compilation done\n") training_iter = 0 validation_frequency = 10 print "start training.." while True: # shuffle data random.shuffle(train_trees) # for each mini-batch in for i in xrange(batch_number): training_iter += 1 batch_trees = train_trees[i * batch_size:(i + 1) * batch_size] batch_nodes = collect_nodes(batch_trees) x, y = build_input(batch_nodes, token2id) # train the model() model.update_embedding(x) model.train(x, y) print "At iter %d" % (training_iter) if training_iter % validation_frequency == 0: classifier = NumpyRNTN.load_from_theano_model(model, token2id) def accuracy(trees): prediction = np.array( [classifier.predict_top_node(tree) for tree in trees]) correct = np.array([tree[0] for tree in trees]) return np.mean(prediction == correct) print "At iter %d, train accuracy %.2f%%, dev accuracy %.2f%%" % ( training_iter, accuracy(train_trees) * 100, accuracy(dev_trees) * 100)
def main(batch_size = 3): import random from recnn_util import load_data train_trees, dev_trees, test_trees, token2id = load_data("data/stanford_sentiment_treebank.pkl") sys.stderr.write("Data load done") batch_number = len(train_trees) / batch_size x = T.imatrix('x') y = T.ivector('y') model = RNTN( x, y, vocab_size = len(token2id), embed_dim = 10, label_n = 5, ) sys.stderr.write("Model compilation done\n") training_iter = 0 validation_frequency = 10 print "start training.." while True: # shuffle data random.shuffle(train_trees) # for each mini-batch in for i in xrange(batch_number): training_iter += 1 batch_trees = train_trees[i*batch_size:(i+1)*batch_size] batch_nodes = collect_nodes(batch_trees) x,y = build_input(batch_nodes, token2id) # train the model() model.update_embedding(x) model.train(x, y) print "At iter %d" %(training_iter) if training_iter % validation_frequency == 0: classifier = NumpyRNTN.load_from_theano_model(model, token2id) def accuracy(trees): prediction = np.array([classifier.predict_top_node(tree) for tree in trees]) correct = np.array([tree[0] for tree in trees]) return np.mean(prediction == correct) print "At iter %d, train accuracy %.2f%%, dev accuracy %.2f%%" %(training_iter, accuracy(train_trees) * 100, accuracy(dev_trees) * 100)
vocab_size = 6 embed_dim = 3 label_n = 5 word2id = { 'I': 0, 'love': 1, 'you': 2, '<UNK>': 5, } x = T.imatrix('x') y = T.ivector('y') th_model = TheanoRNTN(x, y, vocab_size, embed_dim, label_n) np_model = NumpyRNTN.load_from_theano_model( th_model, word2id) # (embedding = th_model.embedding.get_value(), # rntn_layer = RNTNLayer(th_model.rntn_layer.V.get_value(), th_model.rntn_layer.W.get_value()), # logreg_layer = LogisticRegression(th_model.logreg_layer.W.get_value(), th_model.logreg_layer.b.get_value()), # word2id = word2id) x_input = np.asarray([[4, 2, 5], [3, 1, 4]], dtype=np.int32) tree_input = (5, "love", (3, (3, "you"), (3, "bro"))) actual = np_model.get_node_vector(tree_input) th_model.update_embedding(x_input) expected = th_model.embedding.get_value()[3] assert_matrix_eq(actual, expected, "node vector")
embed_dim = 3 label_n = 5 word2id = { 'I': 0, 'love': 1, 'you':2, '<UNK>': 5, } x = T.imatrix('x') y = T.ivector('y') th_model = TheanoRNTN(x, y, vocab_size, embed_dim, label_n) np_model = NumpyRNTN.load_from_theano_model(th_model, word2id)# (embedding = th_model.embedding.get_value(), # rntn_layer = RNTNLayer(th_model.rntn_layer.V.get_value(), th_model.rntn_layer.W.get_value()), # logreg_layer = LogisticRegression(th_model.logreg_layer.W.get_value(), th_model.logreg_layer.b.get_value()), # word2id = word2id) x_input = np.asarray([[4, 2, 5], [3, 1, 4]], dtype=np.int32) tree_input = (5, "love", (3, (3, "you"), (3, "bro"))) actual = np_model.get_node_vector(tree_input) th_model.update_embedding(x_input) expected = th_model.embedding.get_value()[3]