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)
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 = []
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'))