def validate(args, epoch, model, loader, criterion, logger): steps = len(loader) local_loss = AverageMeter() local_acc = AverageMeter() local_recall = AverageMeter() aver_loss = AverageMeter() aver_acc = AverageMeter() aver_recall = AverageMeter() model.eval() if args.verbose: logger.info("Validating") with torch.no_grad(): for i, (images, targets) in enumerate(loader, start=1): if args.gpu is not None: images = images.cuda(args.gpu, non_blocking=True) targets = targets.cuda(args.gpu, non_blocking=True) outputs = model(images) if args.multi: outputs = torch.sigmoid(outputs) loss = criterion(outputs, targets) if args.multi: precision, recall = calculate_metrics( outputs.detach().cpu().numpy(), targets.detach().cpu().numpy(), args.threshold) else: precision = accuracy(outputs, targets)[0].item() recall = precision local_loss.update(loss.item(), images.size(0)) local_acc.update(precision, images.size(0)) local_recall.update(recall, images.size(0)) if args.distributed: running_metrics = torch.FloatTensor( [loss.item(), precision, recall]).cuda(args.gpu) running_metrics /= args.world_size dist.all_reduce(running_metrics, op=dist.ReduceOp.SUM) aver_loss.update(running_metrics[0].item()) aver_acc.update(running_metrics[1].item()) aver_recall.update(running_metrics[2].item()) else: aver_loss.update(loss.item(), images.size(0)) aver_acc.update(precision, images.size(0)) aver_recall.update(recall, images.size(0)) if args.verbose and i % args.log_interval == 0: logger.info("Epoch: [{}] [{}]/[{}]({:.2%}) " "Loss: {:.4f} / {:.4f} / {:.4f} " "Acc: {:.2f} / {:.2f} / {:.2f} " "Recall: {:.2f} / {:.2f} / {:.2f}".format( epoch, i, steps, i / steps, loss, local_loss.avg, aver_loss.avg, precision, local_acc.avg, aver_acc.avg, recall, local_recall.avg, aver_recall.avg)) return aver_loss.avg, aver_acc.avg, aver_recall.avg
from sklearn.naive_bayes import GaussianNB from helper import get_data, calculate_metrics name = 'Naive Bayes' if __name__ == '__main__': x_train, x_test, y_train, y_test = get_data() classifier = GaussianNB() classifier.fit(x_train, y_train) y_predicted = classifier.predict(x_test) calculate_metrics(y_predicted, y_test, name)