示例#1
0
 iterations += 1
 answer = model(batch)
 n_correct += (torch.max(answer, 1)[1].view(batch.label.size()).data == batch.label.data).sum()
 n_total += batch.batch_size
 train_acc = 100. * n_correct/n_total
 loss = criterion(answer, batch.label)
 loss.backward(); opt.step()
 if iterations % args.save_every == 0:
     snapshot_prefix = os.path.join(args.save_path, 'snapshot')
     snapshot_path = snapshot_prefix + '_acc_{:.4f}_loss_{:.6f}_iter_{}_model.pt'.format(train_acc, loss.data[0], iterations)
     torch.save(model, snapshot_path)
     for f in glob.glob(snapshot_prefix + '*'):
         if f != snapshot_path:
             os.remove(f)
 if iterations % args.dev_every == 0:
     model.eval(); dev_iter.init_epoch()
     n_dev_correct, dev_loss = 0, 0
     for dev_batch_idx, dev_batch in enumerate(dev_iter):
          answer = model(dev_batch)
          n_dev_correct += (torch.max(answer, 1)[1].view(dev_batch.label.size()).data == dev_batch.label.data).sum()
          dev_loss = criterion(answer, dev_batch.label)
     dev_acc = 100. * n_dev_correct / len(dev)
     print(dev_log_template.format(time.time()-start,
         epoch, iterations, 1+batch_idx, len(train_iter),
         100. * (1+batch_idx) / len(train_iter), loss.data[0], dev_loss.data[0], train_acc, dev_acc))
     if dev_acc > best_dev_acc:
         best_dev_acc = dev_acc
         snapshot_prefix = os.path.join(args.save_path, 'best_snapshot')
         snapshot_path = snapshot_prefix + '_devacc_{}_devloss_{}__iter_{}_model.pt'.format(dev_acc, dev_loss.data[0], iterations)
         torch.save(model, snapshot_path)
         for f in glob.glob(snapshot_prefix + '*'):
示例#2
0
        # checkpoint model periodically
        if iterations % args.save_every == 0:
            snapshot_prefix = os.path.join(args.save_path, 'snapshot')
            snapshot_path = snapshot_prefix + '_acc_{:.4f}_loss_{:.6f}_iter_{}_model.pt'.format(
                train_acc, loss.item(), iterations)
            torch.save(model, snapshot_path)
            for f in glob.glob(snapshot_prefix + '*'):
                if f != snapshot_path:
                    os.remove(f)

        # evaluate performance on validation set periodically
        if iterations % args.dev_every == 0:

            # switch model to evaluation mode
            model.eval()
            dev_iter.init_epoch()

            # calculate accuracy on validation set
            n_dev_correct, dev_loss = 0, 0
            with torch.no_grad():
                for dev_batch_idx, dev_batch in enumerate(dev_iter):
                    answer = model(dev_batch)
                    n_dev_correct += (torch.max(answer, 1)[1].view(
                        dev_batch.label.size()) == dev_batch.label
                                      ).sum().item()
                    dev_loss = criterion(answer, dev_batch.label)
            dev_acc = 100. * n_dev_correct / len(dev)

            print(
                dev_log_template.format(
        loss.backward(); opt.step()

        # checkpoint model periodically
        if iterations % args.save_every == 0:
            snapshot_prefix = os.path.join(args.save_path, 'snapshot')
            snapshot_path = snapshot_prefix + '_acc_{:.4f}_loss_{:.6f}_iter_{}_model.pt'.format(train_acc, loss.item(), iterations)
            torch.save(model, snapshot_path)
            for f in glob.glob(snapshot_prefix + '*'):
                if f != snapshot_path:
                    os.remove(f)

        # evaluate performance on validation set periodically
        if iterations % args.dev_every == 0:

            # switch model to evaluation mode
            model.eval(); dev_iter.init_epoch()

            # calculate accuracy on validation set
            n_dev_correct, dev_loss = 0, 0
            with torch.no_grad():
                for dev_batch_idx, dev_batch in enumerate(dev_iter):
                     answer = model(dev_batch)
                     n_dev_correct += (torch.max(answer, 1)[1].view(dev_batch.label.size()) == dev_batch.label).sum().item()
                     dev_loss = criterion(answer, dev_batch.label)
            dev_acc = 100. * n_dev_correct / len(dev)

            print(dev_log_template.format(time.time()-start,
                epoch, iterations, 1+batch_idx, len(train_iter),
                100. * (1+batch_idx) / len(train_iter), loss.item(), dev_loss.item(), train_acc, dev_acc))

            # update best valiation set accuracy