import os import time import pprint import torch from sklearn.metrics import confusion_matrix def set_gpu(x): os.environ['CUDA_VISIBLE_DEVICES'] = x print('using gpu:', x) def check_dir(path): ''' Create directory if it does not exist. path: Path of directory. ''' if not os.path.exists(path): os.mkdir(path) def count_accuracy(logits, label): pred = torch.argmax(logits, dim=1).view(-1) label = label.view(-1) acc = [0 for c in range(3)] for c in range(3): acc[c] = (pred.eq(label) * label.eq(c)).float() / max((label.eq(c)).sum(), 1) matrix = confusion_matrix(label.cpu().detach().numpy(), pred.cpu().detach().numpy()) pca = matrix.diagonal()/matrix.sum(axis=1) accuracy = 100 * pred.eq(label).float().mean() return accuracy, pca * 100 class Timer(): def __init__(self): self.o = time.time() def measure(self, p=1): x = (time.time() - self.o) / float(p) x = int(x) if x >= 3600: return '{:.1f}h'.format(x / 3600) if x >= 60: return '{}m'.format(round(x / 60)) return '{}s'.format(x) def log(log_file_path, string): ''' Write one line of log into screen and file. log_file_path: Path of log file. string: String to write in log file. ''' with open(log_file_path, 'a+') as f: f.write(string + '\n') f.flush() print(string)