HtulTS is a lightweight time series model designed for both pretraining and downstream tasks (forecasting and classification). It features a shared linear backbone architecture with task-specific heads and optional forgetting mechanisms for improved transfer learning capabilities.
- Shared Linear Backbone: Efficient MLP-based backbone for feature extraction across all tasks
- Task-Specific Heads: Separate heads optimized for:
- Pretraining: Denoising autoencoder for representation learning
- Forecasting: Regression head for time series prediction
- Classification: Convolutional layers for time series classification
- Forgetting Mechanisms: Multiple strategies to reduce catastrophic forgetting during fine-tuning
- Noise Injection: Optional Gaussian noise during pretraining for robust feature learning
Implements three types of forgetting strategies to prevent catastrophic forgetting:
class ForgettingMechanisms(nn.Module):
"""Learnable forgetting gates and adaptive mechanisms"""Forgetting Types:
activation: Learnable forgetting gates applied to activation patternsweight: Weight-level importance scoring with decayadaptive: Adaptive forgetting based on gradient magnitude
Core model architecture with shared backbone and task-specific heads:
class LightweightModel(nn.Module):
"""
Shared linear backbone + task-specific heads
"""Shared Backbone:
- 2-layer MLP with ReLU activations
- Hidden dimension: 512
- Dropout: 0.2 and 0.1
Task-Specific Heads:
| Task | Head Type | Components |
|---|---|---|
| Pretraining | Linear Decoder | Single linear layer mapping to input length |
| Forecasting | Regression Head | 2-layer MLP with dropout for prediction length |
| Classification | CNN Classifier | 3-layer Conv1d + adaptive pooling + classifier |
Wrapper for pretraining and forecasting tasks:
class Model(nn.Module):
"""TimeDART forecasting model"""Methods:
pretrain(): Denoising autoencoder trainingforecast(): Time series forecasting- Automatic normalization/denormalization
Specialized model for classification tasks:
class ClsModel(nn.Module):
"""TimeDART classification model"""args.input_len # Input sequence length (default: 336)
args.pred_len # Prediction length (for forecasting)
args.enc_in # Input channels/features
args.task_name # "pretrain" or "finetune"
args.downstream_task # "forecast" or "classification"
args.use_norm # Apply normalization (default: True)args.use_noise # Enable noise injection during pretraining
args.noise_level # Noise scaling factor (default: 0.1)args.use_forgetting # Enable forgetting mechanisms
args.forgetting_type # "activation", "weight", or "adaptive"
args.forgetting_rate # Forgetting rate (default: 0.1)sh scripts/pretrain/ETTh2.sh && sh scripts/finetune/ETTh2.sh- HtulTS.py - Model architecture
- exp_htults.py - Training pipeline
- Main README - Project overview
- Checkpoints are saved to
./outputs/pretrain_checkpoints/during pretraining - Fine-tuning checkpoints go to
./outputs/checkpoints/ - Test results and metrics saved to
./outputs/test_results/ - TensorBoard logs available in
./outputs/logs/
sh scripts/run_with_logs.sh ETTh1
sh scripts/pretrain_ETTh1_with_logs.sh
sh scripts/finetune_ETTh1_with_logs.sh
sh scripts/pretrain_ETTh1_with_logs.sh && sh scripts/finetune_ETTh1_with_logs.sh
cat outputs/logs/pretrain_ETTh1_.log | tail -50 cat outputs/logs/finetune_ETTh1_.log | tail -50 ls -lh outputs/logs/