Run model in inference mode using a given data loader
(loader, model, uncertainty, device)
| 781 | pred_p.shape[0]/pred_p.shape[1] |
| 782 | return losses/(len(set(perts))) |
| 783 | def evaluate(loader, model, uncertainty, device): |
| 784 | """ |
| 785 | Run model in inference mode using a given data loader |
| 786 | """ |
| 787 | |
| 788 | model.eval() |
| 789 | model.to(device) |
| 790 | pert_cat = [] |
| 791 | pred = [] |
| 792 | truth = [] |
| 793 | pred_de = [] |
| 794 | truth_de = [] |
| 795 | results = {} |
| 796 | logvar = [] |
| 797 | |
| 798 | for itr, batch in enumerate(loader): |
| 799 | |
| 800 | batch.to(device) |
| 801 | pert_cat.extend(batch.pert) |
| 802 | |
| 803 | with torch.no_grad(): |
| 804 | if uncertainty: |
| 805 | p, unc = model(batch) |
| 806 | logvar.extend(unc.cpu()) |
| 807 | else: |
| 808 | p = model(batch) |
| 809 | t = batch.y |
| 810 | pred.extend(p.cpu()) |
| 811 | truth.extend(t.cpu()) |
| 812 | |
| 813 | # Differentially expressed genes |
| 814 | for itr, de_idx in enumerate(batch.de_idx): |
| 815 | pred_de.append(p[itr, de_idx]) |
| 816 | truth_de.append(t[itr, de_idx]) |
| 817 | |
| 818 | # all genes |
| 819 | results['pert_cat'] = np.array(pert_cat) |
| 820 | pred = torch.stack(pred) |
| 821 | truth = torch.stack(truth) |
| 822 | results['pred']= pred.detach().cpu().numpy() |
| 823 | results['truth']= truth.detach().cpu().numpy() |
| 824 | |
| 825 | pred_de = torch.stack(pred_de) |
| 826 | truth_de = torch.stack(truth_de) |
| 827 | results['pred_de']= pred_de.detach().cpu().numpy() |
| 828 | results['truth_de']= truth_de.detach().cpu().numpy() |
| 829 | |
| 830 | if uncertainty: |
| 831 | results['logvar'] = torch.stack(logvar).detach().cpu().numpy() |
| 832 | |
| 833 | return results |
| 834 | |
| 835 | |
| 836 | def compute_metrics(results): |
no test coverage detected