示例#1
0
    def run(self, epoch=None):
        '''
        Run a training loop.
        '''
        if epoch is None:
            epoch = self.args.n_epoch
        print('mbsize: {}, hidden size: {}, layer: {}, dropout: {}'.format(
            self.mb, self.hidden, self.layer, self.dropout),
              file=self.file)
        # Init the model, the optimizer and some structures for logging
        self.reset()

        model = MLP(self.hidden, self.layer, self.dropout)
        #print(model)
        model.reset_parameters()
        #model.cuda()
        model.to(self.args.device)
        #model = torch.nn.DataParallel(model)
        opt = optim.Adam(model.parameters())

        acc = 0  # best dev. acc.
        accc = 0  # test acc. at the time of best dev. acc.
        e = -1  # best dev iteration/epoch

        times = []
        losses = []
        ftime = []
        btime = []
        utime = []

        print('Initial evaluation on dev set:')
        self._evaluate(model, self.devloader, 'dev')

        start = time.time()
        # training loop
        for t in range(epoch):
            print('{}:'.format(t), end='', file=self.file, flush=True)
            # train

            #start = torch.cuda.Event(True)
            #end = torch.cuda.Event(True)
            #start.record()
            loss, ft, bt, ut = self._train(model, opt)
            #end.record()
            #end.synchronize()
            #ttime = start.elapsed_time(end)
            print("(wall time: {:.1f} sec) ".format(time.time() - start),
                  end='')
            #times.append(ttime)
            losses.append(loss)
            ftime.append(ft)
            btime.append(bt)
            utime.append(ut)
            # predict
            curacc = self._evaluate(model, self.devloader, 'dev')
            #if curacc > acc:
            #    e = t
            #    acc = curacc
            #    accc = self._evaluate(model, self.testloader, '    test')
        etime = [sum(t) for t in zip(ftime, btime, utime)]
        print('test acc: {:.2f}'.format(
            self._evaluate(model, self.testloader, '    test')))
        print('best on val set - ${:.2f}|{:.2f} at {}'.format(acc, accc, e),
              file=self.file,
              flush=True)
        print('', file=self.file)
示例#2
0
	y_pred, y_true = [], []
	for step,(x,y) in enumerate(loader):
		x = x.cuda(device)
		out = model(x)
		y_pred.append(torch.argmax(out, dim=1, keepdim=True).cpu())
		y_true.append(y)
	return evaluator.eval({
		"y_true": torch.cat(y_true, dim=0),
		"y_pred": torch.cat(y_pred, dim=0),
	})['acc']

bad_counter = 0
best = 0
best_epoch = 0
train_time = 0
model.reset_parameters()
print("--------------------------")
print("Training...")
for epoch in range(args.epochs):
	loss_tra,train_ep = train(model,args.dev,train_loader,optimizer)
	f1_val = validate(model, args.dev, valid_loader, evaluator)
	train_time+=train_ep
	if(epoch+1)%5 == 0: 
		print(f'Epoch:{epoch+1:02d},'
			f'Train_loss:{loss_tra:.3f}',
			f'Valid_acc:{100*f1_val:.3f}%',
			f'Time_cost{train_time:.3f}')
	if f1_val > best:
		best = f1_val
		best_epoch = epoch
		torch.save(model.state_dict(), checkpt_file)