def evaluate()

in part_selector.py [0:0]


    def evaluate(self, num = 0, num_image_tiles = 8):
        self.clf.eval()
        ext = 'png'
        num_rows = num_image_tiles
        part_id_batch, image_cond_batch = [item.cuda() for item in self.dataset.sample_partial_test(num_rows ** 2)]
        outputs = self.clf.D(image_cond_batch.clone().detach())
        _, predicted = torch.max(outputs, 1)
        with open(str(self.results_dir / self.name / f'{str(num)}-pred.txt'), 'w') as fw:
            for i in range(num_rows):
                for j in range(num_rows):
                    fw.write('%s\t'%self.target_parts[predicted[i*num_rows+j]])
                fw.write('\n')
        with open(str(self.results_dir / self.name / f'{str(num)}-real.txt'), 'w') as fw:
            for i in range(num_rows):
                for j in range(num_rows):
                    fw.write('%s\t'%self.target_parts[part_id_batch[i*num_rows+j]])
                fw.write('\n')
        torchvision.utils.save_image(image_cond_batch[:, -1:], str(self.results_dir / self.name / f'{str(num)}.{ext}'), nrow=num_rows)
        part_id_test, image_cond_test = self.dataset.samples_partid_test.cuda(), self.dataset.samples_partial_test.cuda()
        class_correct = list(0. for i in range(self.n_part_class))
        class_total = list(0. for i in range(self.n_part_class))
        n_batch = self.dataset.__len_test__()//256
        for i in range(n_batch+1):
            if i == n_batch:
                part_id_batch, image_cond_batch = part_id_test[i*256:], image_cond_test[i*256:]
            else:
                part_id_batch, image_cond_batch = part_id_test[i*256:(i+1)*256], image_cond_test[i*256:(i+1)*256]
            outputs = self.clf.D(image_cond_batch.clone().detach())
            _, predicts = torch.max(outputs, 1)
            with torch.no_grad():
                for part_id, pred_id in zip(part_id_batch, predicts):
                    c = (part_id == pred_id).squeeze()
                    class_correct[part_id] += c
                    class_total[part_id] += 1
        print(' | '.join(['%s: %.2f'%(target_part, 100*class_correct[i]/(class_total[i]+1e-6)) for i, target_part in enumerate(self.target_parts)])+
                ' | overall : %.2f'%(100*sum(class_correct)/(sum(class_total)+1e-6)))