import torch.utils.data import torch.nn as nn from utils import make_variable def test_from_save(model, saved_model, data_loader): """Evaluate classifier for source domain.""" # set eval state for Dropout and BN layers classifier = model.load_state_dict(torch.load(saved_model)) classifier.eval() # init loss and accuracy loss = 0.0 acc = 0.0 # set loss function criterion = nn.NLLLoss() # evaluate network for (images, labels) in data_loader: images = make_variable(images, volatile=True) labels = make_variable(labels) #labels = labels.squeeze(1) preds = classifier(images) criterion(preds, labels) loss += criterion(preds, labels).data[0] pred_cls = preds.data.max(1)[1] acc += pred_cls.eq(labels.data).cpu().sum() loss /= len(data_loader) acc /= len(data_loader.dataset) print("Avg Loss = {}, Avg Accuracy = {:.2%}".format(loss, acc)) def eval(model, data_loader): """Evaluate model for dataset.""" # set eval state for Dropout and BN layers model.eval() # init loss and accuracy loss = 0.0 acc = 0.0 acc_domain = 0.0 # set loss function criterion = nn.CrossEntropyLoss() # evaluate network for (images, labels) in data_loader: images = make_variable(images, volatile=True) labels = make_variable(labels) #labels = labels.squeeze(1) size_tgt = len(labels) labels_domain = make_variable(torch.ones(size_tgt).long()) preds, domain = model(images, alpha=0) loss += criterion(preds, labels).data[0] pred_cls = preds.data.max(1)[1] pred_domain = domain.data.max(1)[1] acc += pred_cls.eq(labels.data).cpu().sum() acc_domain += pred_domain.eq(labels_domain.data).cpu().sum() loss /= len(data_loader) acc /= len(data_loader.dataset) acc_domain /= len(data_loader.dataset) print("Avg Loss = {:.6f}, Avg Accuracy = {:.2%}, Avg Domain Accuracy = {:2%}".format(loss, acc, acc_domain)) def eval_src(model, data_loader): """Evaluate model for dataset.""" # set eval state for Dropout and BN layers model.eval() # init loss and accuracy loss = 0.0 acc = 0.0 acc_domain = 0.0 # set loss function criterion = nn.CrossEntropyLoss() # evaluate network for (images, labels) in data_loader: images = make_variable(images, volatile=True) labels = make_variable(labels) #labels = labels.squeeze(1) size_tgt = len(labels) labels_domain = make_variable(torch.zeros(size_tgt).long()) preds, domain = model(images, alpha=0) loss += criterion(preds, labels).data[0] pred_cls = preds.data.max(1)[1] pred_domain = domain.data.max(1)[1] acc += pred_cls.eq(labels.data).cpu().sum() acc_domain += pred_domain.eq(labels_domain.data).cpu().sum() loss /= len(data_loader) acc /= len(data_loader.dataset) acc_domain /= len(data_loader.dataset) print("Avg Loss = {:.6f}, Avg Accuracy = {:.2%}, Avg Domain Accuracy = {:2%}".format(loss, acc, acc_domain)) def eval_src_(model, data_loader): """Evaluate classifier for source domain.""" # set eval state for Dropout and BN layers model.eval() # init loss and accuracy loss = 0.0 acc = 0.0 # set loss function criterion = nn.NLLLoss() # evaluate network for (images, labels) in data_loader: images = make_variable(images, volatile=True) labels = make_variable(labels) #labels = labels.squeeze(1) preds = model(images) criterion(preds, labels) loss += criterion(preds, labels).data[0] pred_cls = preds.data.max(1)[1] acc += pred_cls.eq(labels.data).cpu().sum() loss /= len(data_loader) acc /= len(data_loader.dataset) print("Avg Loss = {:.6f}, Avg Accuracy = {:.2%}".format(loss, acc))