def test_basic(instances, sgd): X, y = instances nr_class = 3 model = LinearModel(nr_class) yh, backprop = model.begin_update(X) loss1 = ((yh - y) ** 2).sum() backprop(yh - y, sgd) yh, backprop = model.begin_update(X) loss2 = ((yh - y) ** 2).sum() assert loss2 < loss1 print(loss2, loss1)
def main(): train, dev = datasets.imdb() train_X, train_y = zip(*train) dev_X, dev_y = zip(*dev) model = LinearModel(2) train_y = to_categorical(train_y, nb_classes=2) dev_y = to_categorical(dev_y, nb_classes=2) nlp = spacy.load("en") train_X = [ model.ops.asarray([tok.orth for tok in doc], dtype="uint64") for doc in nlp.pipe(train_X) ] dev_X = [ model.ops.asarray([tok.orth for tok in doc], dtype="uint64") for doc in nlp.pipe(dev_X) ] dev_X = preprocess(model.ops, dev_X) with model.begin_training(train_X, train_y, L2=1e-6) as (trainer, optimizer): trainer.dropout = 0.0 trainer.batch_size = 512 trainer.nb_epoch = 3 trainer.each_epoch.append(lambda: print(model.evaluate(dev_X, dev_y))) for X, y in trainer.iterate(train_X, train_y): keys_vals_lens = preprocess(model.ops, X) scores, backprop = model.begin_update(keys_vals_lens, drop=trainer.dropout) backprop(scores - y, optimizer) with model.use_params(optimizer.averages): print(model.evaluate(dev_X, dev_y))
def test_init(): model = LinearModel(3) keys = numpy.ones((5, ), dtype="uint64") values = numpy.ones((5, ), dtype="f") lengths = numpy.zeros((2, ), dtype=numpy.int_) lengths[0] = 3 lengths[1] = 2 scores, backprop = model.begin_update((keys, values, lengths)) assert scores.shape == (2, 3) d_feats = backprop(scores) assert d_feats is None