From db59713d362f6c3091914fb1d0ebbe484899573b Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Fri, 12 Mar 2021 02:46:04 +0000 Subject: [PATCH] Add torch.no_grad for evaluation --- qlib/contrib/model/pytorch_alstm.py | 16 +++++++--------- qlib/contrib/model/pytorch_alstm_ts.py | 11 ++++++----- qlib/contrib/model/pytorch_gru.py | 11 ++++++----- qlib/contrib/model/pytorch_gru_ts.py | 16 +++++++--------- qlib/contrib/model/pytorch_tabnet.py | 18 +++++++++--------- 5 files changed, 35 insertions(+), 37 deletions(-) diff --git a/qlib/contrib/model/pytorch_alstm.py b/qlib/contrib/model/pytorch_alstm.py index 13cb330b9..135ce2e39 100644 --- a/qlib/contrib/model/pytorch_alstm.py +++ b/qlib/contrib/model/pytorch_alstm.py @@ -208,12 +208,13 @@ class ALSTM(Model): feature = torch.from_numpy(x_values[indices[i : i + self.batch_size]]).float().to(self.device) label = torch.from_numpy(y_values[indices[i : i + self.batch_size]]).float().to(self.device) - pred = self.ALSTM_model(feature) - loss = self.loss_fn(pred, label) - losses.append(loss.item()) + with torch.no_grad(): + pred = self.ALSTM_model(feature) + loss = self.loss_fn(pred, label) + losses.append(loss.item()) - score = self.metric_fn(pred, label) - scores.append(score.item()) + score = self.metric_fn(pred, label) + scores.append(score.item()) return np.mean(losses), np.mean(scores) @@ -295,10 +296,7 @@ class ALSTM(Model): x_batch = torch.from_numpy(x_values[begin:end]).float().to(self.device) with torch.no_grad(): - if self.use_gpu: - pred = self.ALSTM_model(x_batch).detach().cpu().numpy() - else: - pred = self.ALSTM_model(x_batch).detach().numpy() + pred = self.ALSTM_model(x_batch).detach().cpu().numpy() preds.append(pred) diff --git a/qlib/contrib/model/pytorch_alstm_ts.py b/qlib/contrib/model/pytorch_alstm_ts.py index 518a5631c..7b4eddbbb 100644 --- a/qlib/contrib/model/pytorch_alstm_ts.py +++ b/qlib/contrib/model/pytorch_alstm_ts.py @@ -195,12 +195,13 @@ class ALSTM(Model): # feature[torch.isnan(feature)] = 0 label = data[:, -1, -1].to(self.device) - pred = self.ALSTM_model(feature.float()) - loss = self.loss_fn(pred, label) - losses.append(loss.item()) + with torch.no_grad(): + pred = self.ALSTM_model(feature.float()) + loss = self.loss_fn(pred, label) + losses.append(loss.item()) - score = self.metric_fn(pred, label) - scores.append(score.item()) + score = self.metric_fn(pred, label) + scores.append(score.item()) return np.mean(losses), np.mean(scores) diff --git a/qlib/contrib/model/pytorch_gru.py b/qlib/contrib/model/pytorch_gru.py index 2d25db80b..bf4e05cfd 100755 --- a/qlib/contrib/model/pytorch_gru.py +++ b/qlib/contrib/model/pytorch_gru.py @@ -208,12 +208,13 @@ class GRU(Model): feature = torch.from_numpy(x_values[indices[i : i + self.batch_size]]).float().to(self.device) label = torch.from_numpy(y_values[indices[i : i + self.batch_size]]).float().to(self.device) - pred = self.gru_model(feature) - loss = self.loss_fn(pred, label) - losses.append(loss.item()) + with torch.no_grad(): + pred = self.gru_model(feature) + loss = self.loss_fn(pred, label) + losses.append(loss.item()) - score = self.metric_fn(pred, label) - scores.append(score.item()) + score = self.metric_fn(pred, label) + scores.append(score.item()) return np.mean(losses), np.mean(scores) diff --git a/qlib/contrib/model/pytorch_gru_ts.py b/qlib/contrib/model/pytorch_gru_ts.py index 2492cb802..36b2e1492 100755 --- a/qlib/contrib/model/pytorch_gru_ts.py +++ b/qlib/contrib/model/pytorch_gru_ts.py @@ -195,12 +195,13 @@ class GRU(Model): # feature[torch.isnan(feature)] = 0 label = data[:, -1, -1].to(self.device) - pred = self.GRU_model(feature.float()) - loss = self.loss_fn(pred, label) - losses.append(loss.item()) + with torch.no_grad(): + pred = self.GRU_model(feature.float()) + loss = self.loss_fn(pred, label) + losses.append(loss.item()) - score = self.metric_fn(pred, label) - scores.append(score.item()) + score = self.metric_fn(pred, label) + scores.append(score.item()) return np.mean(losses), np.mean(scores) @@ -280,10 +281,7 @@ class GRU(Model): feature = data[:, :, 0:-1].to(self.device) with torch.no_grad(): - if self.use_gpu: - pred = self.GRU_model(feature.float()).detach().cpu().numpy() - else: - pred = self.GRU_model(feature.float()).detach().numpy() + pred = self.GRU_model(feature.float()).detach().cpu().numpy() preds.append(pred) diff --git a/qlib/contrib/model/pytorch_tabnet.py b/qlib/contrib/model/pytorch_tabnet.py index b9499ca86..950c2dffa 100644 --- a/qlib/contrib/model/pytorch_tabnet.py +++ b/qlib/contrib/model/pytorch_tabnet.py @@ -219,7 +219,7 @@ class TabnetModel(Model): self.logger.info("best score: %.6lf @ %d" % (best_score, best_epoch)) self.tabnet_model.load_state_dict(best_param) torch.save(best_param, save_path) - + if self.use_gpu: torch.cuda.empty_cache() @@ -272,12 +272,12 @@ class TabnetModel(Model): label = y_values[indices[i : i + self.batch_size]].float().to(self.device) priors = torch.ones(self.batch_size, self.d_feat).to(self.device) with torch.no_grad(): - pred = self.tabnet_model(feature, priors) - loss = self.loss_fn(pred, label) - losses.append(loss.item()) + pred = self.tabnet_model(feature, priors) + loss = self.loss_fn(pred, label) + losses.append(loss.item()) - score = self.metric_fn(pred, label) - scores.append(score.item()) + score = self.metric_fn(pred, label) + scores.append(score.item()) return np.mean(losses), np.mean(scores) @@ -361,10 +361,10 @@ class TabnetModel(Model): S_mask = S_mask.to(self.device) priors = 1 - S_mask with torch.no_grad(): - (vec, sparse_loss) = self.tabnet_model(feature, priors) - f = self.tabnet_decoder(vec) + (vec, sparse_loss) = self.tabnet_model(feature, priors) + f = self.tabnet_decoder(vec) - loss = self.pretrain_loss_fn(label, f, S_mask) + loss = self.pretrain_loss_fn(label, f, S_mask) losses.append(loss.item()) return np.mean(losses)