예제 #1
0
def train_ch8(model, train_iter, vocab, lr, num_epochs, strategy, use_random_iter=False):
    """Train a model (defined in Chapter 8)."""
    params = model.params  # ---------------------------------------------------------------------------------------------------------
    with strategy.scope():

        loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
        updater = tf.keras.optimizers.Adam(lr, amsgrad=True)
    animator = d2l.Animator(xlabel='epoch', ylabel='perplexity',
                            legend=['train'], xlim=[10, num_epochs])
    # def predict(self,vocab=vocab,prefix='generated ',num_tokens=50):
    predict = lambda prefix: model.predict(vocab=vocab, prefix=prefix, num_tokens=50)
    # Train and predict
    for epoch in range(num_epochs):
        ppl, speed = train_epoch_ch8(
            model, train_iter, loss, updater, params, use_random_iter)
        if (epoch + 1) % 10 == 0:
            print(predict('time traveller'))
            animator.add(epoch + 1, [ppl])
    device = d2l.try_gpu()._device_name
    print(f'perplexity {ppl:.1f}, {speed:.1f} tokens/sec on {str(device)}')
    print(predict('time traveller'))
    print(predict('traveller'))

    device_name = d2l.try_gpu()._device_name
    strategy = tf.distribute.OneDeviceStrategy(device_name)
    num_epochs, num_hiddens, lr = 500, 512, 0.0001
    model=RnnModelScrach(num_hiddens,len(vocab))
    train_ch8(model, train_iter, vocab,lr, num_epochs, strategy)
예제 #2
0
def train(net, train_iter, test_iter, loss, num_epochs, updater):
    animator = d2l.Animator(xlabel='epoch', xlim=[1, num_epochs], ylim=[0.3, 0.9],
                        legend=['train loss', 'train acc', 'test acc'])
    for epoch in range(num_epochs):
        train_metrics = train_epoch(net, train_iter, loss, updater)
        test_acc = evaluate_accuracy(net, test_iter)
        animator.add(epoch + 1, train_metrics + (test_acc,))
    train_loss, train_acc = train_metrics
 def __init__(self, net, train_iter, test_iter, num_epochs, device_name):
     self.timer = d2l.Timer()
     self.animator = d2l.Animator(
         xlabel='epoch', xlim=[0, num_epochs], legend=[
             'train loss', 'train acc', 'test acc'])
     self.net = net
     self.train_iter = train_iter
     self.test_iter = test_iter
     self.num_epochs = num_epochs
     self.device_name = device_name
     self.loss_arr = []
     self.train_acc_arr = []
     self.test_acc_arr = []
예제 #4
0
def train_ch8(model, train_iter, vocab, num_hiddens, lr, num_epochs,
              use_random_iter=False):
    """Train a model (defined in Chapter 8)."""
    params = get_params(len(vocab), num_hiddens)
    loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
    animator = d2l.Animator(xlabel='epoch', ylabel='perplexity',
                            legend=['train'], xlim=[1, num_epochs])
    updater = tf.keras.optimizers.SGD(lr)
    predict = lambda prefix: predict_ch8(prefix, 50, model, vocab, params)
    # Train and predict
    for epoch in range(num_epochs):
        ppl, speed = train_epoch_ch8(
             model, train_iter, loss, updater, params, use_random_iter)
        if epoch % 10 == 0:
            print(predict('time traveller'))
            animator.add(epoch + 1, [ppl])
    device = d2l.try_gpu()._device_name
    print(f'perplexity {ppl:.1f}, {speed:.1f} tokens/sec on {str(device)}')
    print(predict('time traveller'))
    print(predict('traveller'))