{"record":{"id":"8cde5c7e4c4fce3f","repo":"microsoft/qlib","slug":"optimizer-is-not-supported-8cde5c","errorCode":null,"errorMessage":"optimizer {} is not supported!","messagePattern":"optimizer (.+?) is not supported!","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"qlib/contrib/model/pytorch_krnn.py","lineNumber":340,"sourceCode":"            np.random.seed(self.seed)\r\n            torch.manual_seed(self.seed)\r\n\r\n        self.krnn_model = KRNNModel(\r\n            fea_dim=self.fea_dim,\r\n            cnn_dim=self.cnn_dim,\r\n            cnn_kernel_size=self.cnn_kernel_size,\r\n            rnn_dim=self.rnn_dim,\r\n            rnn_dups=self.rnn_dups,\r\n            rnn_layers=self.rnn_layers,\r\n            dropout=self.dropout,\r\n            device=self.device,\r\n        )\r\n        if optimizer.lower() == \"adam\":\r\n            self.train_optimizer = optim.Adam(self.krnn_model.parameters(), lr=self.lr)\r\n        elif optimizer.lower() == \"gd\":\r\n            self.train_optimizer = optim.SGD(self.krnn_model.parameters(), lr=self.lr)\r\n        else:\r\n            raise NotImplementedError(\"optimizer {} is not supported!\".format(optimizer))\r\n\r\n        self.fitted = False\r\n        self.krnn_model.to(self.device)\r\n\r\n    @property\r\n    def use_gpu(self):\r\n        return self.device != torch.device(\"cpu\")\r\n\r\n    def mse(self, pred, label):\r\n        loss = (pred - label) ** 2\r\n        return torch.mean(loss)\r\n\r\n    def loss_fn(self, pred, label):\r\n        mask = ~torch.isnan(label)\r\n\r\n        if self.loss == \"mse\":\r\n            return self.mse(pred[mask], label[mask])\r\n\r","sourceCodeStart":322,"sourceCodeEnd":358,"githubUrl":"https://github.com/microsoft/qlib/blob/79633dd9506ea689e5400dea0197717b5b3d74b7/qlib/contrib/model/pytorch_krnn.py#L322-L358","documentation":"KRNNModel accepts only 'adam' (optim.Adam) and 'gd' (optim.SGD), case-insensitive. Any other optimizer string raises NotImplementedError at the end of __init__, so construction fails immediately.","triggerScenarios":"KRNNModel(optimizer='adamw'|'rmsprop'|'sgd'|typo) — note 'sgd' is NOT accepted, the literal string is 'gd'.","commonSituations":"Assuming 'sgd' is the spelling for stochastic gradient descent (this file wants 'gd'); hyperparameter grids written for other frameworks.","solutions":["Use optimizer='adam' or optimizer='gd'","For other optimizers, subclass KRNNModel and add a branch"],"exampleFix":"# before\nKRNNModel(optimizer=\"sgd\")  # raises\n\n# after\nKRNNModel(optimizer=\"gd\")  # maps to optim.SGD","handlingStrategy":"validation","validationCode":"assert optimizer.lower() in (\"adam\", \"gd\"), f\"KRNN supports adam/gd only, got {optimizer!r}\"","typeGuard":"def is_supported_optimizer(name: str) -> bool:\n    return name.lower() in (\"adam\", \"gd\")","tryCatchPattern":null,"preventionTips":["Note the accepted SGD spelling is 'gd', not 'sgd'","Validate optimizer strings from search grids before model construction"],"tags":["qlib","krnn","optimizer","invalid-argument"],"backgroundTag":null,"analyzedSha":"79633dd9506ea689e5400dea0197717b5b3d74b7","analyzedAt":"2026-08-15T07:01:27.511Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}