def eval_model(dataset, dataset_loader, standard_encoding, model_encoding, model, trustedEncoder = False, image_group = {}):
model.eval()
print "evaluating model..."
if trustedEncoder == False:
print "not using trusted encoder. This may take signficantly longer as predictions are converted to other encoding."
mx = len(dataset_loader)
batches = []
top1 = imSituTensorEvaluation(1, 3, image_group)
top5 = imSituTensorEvaluation(5, 3, image_group)
for i, (indexes, input, target) in enumerate(dataset_loader):
if True or i % 10 == 0: print "batch {} out of {}\r".format(i+1,mx),
input_var = torch.autograd.Variable(input.cuda(), volatile = True)
#target_var = torch.autograd.Variable(target.cuda(), volatile = True)
(scores,predictions) = model.forward_max(input_var)
(s_sorted, idx) = torch.sort(scores, 1, True)
if not trustedEncoder:
predictions = standard_encoding.to_tensor(model_encoding.to_situation(predictions), False, False)
predictions = predictions.view(target.size()[0], standard_encoding.n_verbs(), -1)
else:
predictions = predictions.data
#(s_sorted, idx) = torch.sort(scores, 1, True)
top1.add_point(target, predictions, idx.data, dataset.index_image(indexes))
top5.add_point(target, predictions, idx.data, dataset.index_image(indexes))
return (top1, top5)
#assumes the predictions are grouped by image, and sorted
评论列表
文章目录