コード例 #1
0
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)
コード例 #2
0
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)
コード例 #3
0
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")
コード例 #4
0
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]