microsoft/qlib · error · NotImplementedError
optimizer {} is not supported!
Error message
optimizer {} is not supported! What it means
Raised by the TCN (Temporal Convolutional Network) model init in qlib/contrib/model/pytorch_tcn.py:135 when optimizer.lower() is neither 'adam' nor 'gd'. As with the other pytorch contrib models, 'adam' maps to torch.optim.Adam and 'gd' to torch.optim.SGD at self.lr; other tokens raise NotImplementedError right after the model-size log line, during construction.
Source
Thrown at qlib/contrib/model/pytorch_tcn.py:135
np.random.seed(self.seed)
torch.manual_seed(self.seed)
self.tcn_model = TCNModel(
num_input=self.d_feat,
output_size=1,
num_channels=[self.n_chans] * self.num_layers,
kernel_size=self.kernel_size,
dropout=self.dropout,
)
self.logger.info("model:\n{:}".format(self.tcn_model))
self.logger.info("model size: {:.4f} MB".format(count_parameters(self.tcn_model)))
if optimizer.lower() == "adam":
self.train_optimizer = optim.Adam(self.tcn_model.parameters(), lr=self.lr)
elif optimizer.lower() == "gd":
self.train_optimizer = optim.SGD(self.tcn_model.parameters(), lr=self.lr)
else:
raise NotImplementedError("optimizer {} is not supported!".format(optimizer))
self.fitted = False
self.tcn_model.to(self.device)
@property
def use_gpu(self):
return self.device != torch.device("cpu")
def mse(self, pred, label):
loss = (pred - label) ** 2
return torch.mean(loss)
def loss_fn(self, pred, label):
mask = ~torch.isnan(label)
if self.loss == "mse":
return self.mse(pred[mask], label[mask])
View on GitHub (pinned to 79633dd950)
Solutions
- Set optimizer: 'adam' or 'gd' in TCN kwargs.
- Subclass the TCN model and replace self.train_optimizer for other optimizers.
Example fix
# before kwargs: optimizer: sgd # after kwargs: optimizer: adam # or 'gd'
Defensive patterns
Strategy: validation
Validate before calling
assert config["optimizer"].lower() in ("adam", "gd"), "TCN supports only 'adam' or 'gd'" Type guard
def is_supported_optimizer(optimizer: str) -> bool:
return optimizer.lower() in ("adam", "gd") Try / catch
try:
model = TCNModel(**kwargs)
except NotImplementedError as e:
if "optimizer" in str(e):
raise ValueError("Use optimizer='adam' or 'gd'") from e
raise Prevention
- Apply the repo-wide 'adam'/'gd' optimizer vocabulary.
- Fail fast on config validation instead of at model construction time.
When it happens
Trigger: Passing optimizer='sgd', 'adamw', 'rmsprop', etc. in TCN model kwargs; fails in __init__ before fit() is ever reached.
Common situations: 'sgd' vs qlib's 'gd' naming; optimizer strings pasted from PyTorch tutorials or other model sections.
Related errors
- optimizer {} is not supported!
- optimizer {} is not supported!
- optimizer {} is not supported!
- optimizer {} is not supported!
- optimizer {} is not supported!
AI-assisted analysis of microsoft/qlib@79633dd950 (2026-08-15).
Data as JSON: /api/errors/d14ba025b21ac4c9.
Report an issue: GitHub.