From 19a0eb78bc641485cfa6d67fe8f934fbfa116b5c Mon Sep 17 00:00:00 2001 From: Fivele-Li <128388363+Fivele-Li@users.noreply.github.com> Date: Fri, 26 May 2023 14:44:34 +0800 Subject: [PATCH] Fix TCN model input dimension mismatch (#1520) * transpose dimension 1 and 2 to match nn.Conv1d input * 1.update TCN benchmarks; 2.Emphasize updating the benchmark table; * replace specific version with main --------- Co-authored-by: lijinhui <362237642@qq.com> --- examples/benchmarks/README.md | 4 ++-- qlib/contrib/model/pytorch_tcn_ts.py | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/examples/benchmarks/README.md b/examples/benchmarks/README.md index 24d3f5902..af4403bbb 100644 --- a/examples/benchmarks/README.md +++ b/examples/benchmarks/README.md @@ -26,7 +26,7 @@ The numbers shown below demonstrate the performance of the entire `workflow` of | Model Name | Dataset | IC | ICIR | Rank IC | Rank ICIR | Annualized Return | Information Ratio | Max Drawdown | |------------------------------------------|-------------------------------------|-------------|-------------|-------------|-------------|-------------------|-------------------|--------------| -| TCN(Shaojie Bai, et al.) | Alpha158 | 0.0275±0.00 | 0.2157±0.01 | 0.0411±0.00 | 0.3379±0.01 | 0.0190±0.02 | 0.2887±0.27 | -0.1202±0.03 | +| TCN(Shaojie Bai, et al.) | Alpha158 | 0.0279±0.00 | 0.2181±0.01 | 0.0421±0.00 | 0.3429±0.01 | 0.0262±0.02 | 0.4133±0.25 | -0.1090±0.03 | | TabNet(Sercan O. Arik, et al.) | Alpha158 | 0.0204±0.01 | 0.1554±0.07 | 0.0333±0.00 | 0.2552±0.05 | 0.0227±0.04 | 0.3676±0.54 | -0.1089±0.08 | | Transformer(Ashish Vaswani, et al.) | Alpha158 | 0.0264±0.00 | 0.2053±0.02 | 0.0407±0.00 | 0.3273±0.02 | 0.0273±0.02 | 0.3970±0.26 | -0.1101±0.02 | | GRU(Kyunghyun Cho, et al.) | Alpha158(with selected 20 features) | 0.0315±0.00 | 0.2450±0.04 | 0.0428±0.00 | 0.3440±0.03 | 0.0344±0.02 | 0.5160±0.25 | -0.1017±0.02 | @@ -134,7 +134,7 @@ If you want to contribute your new models, you can follow the steps below. - `README.md`: a brief introduction to your models - `workflow_config__.yaml`: a configuration which can read by `qrun`. You are encouraged to run your model in all datasets. 3. You can integrate your model as a module [in this folder](https://github.com/microsoft/qlib/tree/main/qlib/contrib/model). -4. Please updated your results in the benchmark tables, e.g. [Alpha360](#alpha158-dataset), [Alpha158](#alpha158-dataset)(the values of each metric are the mean and std calculated based on 20 runs with different random seeds, if you don't have enough computational resource, you can ask for help in the PR). +4. Please update your results in the above **Benchmark Tables**, e.g. [Alpha360](#alpha158-dataset), [Alpha158](#alpha158-dataset)(the values of each metric are the mean and std calculated based on **20 Runs** with different random seeds. You can accomplish the above operations through the automated [script](https://github.com/microsoft/qlib/blob/main/examples/run_all_model.py#LL286C22-L286C22) provided by Qlib, and get the final result in the .md file. if you don't have enough computational resource, you can ask for help in the PR). 5. Update the info in the index page in the [news list](https://github.com/microsoft/qlib#newspaper-whats-new----sparkling_heart) and [model list](https://github.com/microsoft/qlib#quant-model-paper-zoo). Finally, you can send PR for review. ([here is an example](https://github.com/microsoft/qlib/pull/1040)) diff --git a/qlib/contrib/model/pytorch_tcn_ts.py b/qlib/contrib/model/pytorch_tcn_ts.py index 4972a3065..bb2e5ea5b 100755 --- a/qlib/contrib/model/pytorch_tcn_ts.py +++ b/qlib/contrib/model/pytorch_tcn_ts.py @@ -168,7 +168,8 @@ class TCN(Model): self.TCN_model.train() for data in data_loader: - feature = data[:, :, 0:-1].to(self.device) + data = torch.transpose(data, 1, 2) + feature = data[:, 0:-1, :].to(self.device) label = data[:, -1, -1].to(self.device) pred = self.TCN_model(feature.float()) @@ -187,8 +188,8 @@ class TCN(Model): losses = [] for data in data_loader: - - feature = data[:, :, 0:-1].to(self.device) + data = torch.transpose(data, 1, 2) + feature = data[:, 0:-1, :].to(self.device) # feature[torch.isnan(feature)] = 0 label = data[:, -1, -1].to(self.device)