{"record":{"id":"451be0ba8a56394f","repo":"Stability-AI/generative-models","slug":"did-not-find-parameters-for-pattern-pattern","errorCode":null,"errorMessage":"Did not find parameters for pattern {pattern_}","messagePattern":"Did not find parameters for pattern (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"sgm/models/autoencoder.py","lineNumber":358,"sourceCode":"        self.log_dict(full_log_dict, sync_dist=True)\n        return full_log_dict\n\n    def get_param_groups(\n        self, parameter_names: List[List[str]], optimizer_args: List[dict]\n    ) -> Tuple[List[Dict[str, Any]], int]:\n        groups = []\n        num_params = 0\n        for names, args in zip(parameter_names, optimizer_args):\n            params = []\n            for pattern_ in names:\n                pattern_params = []\n                pattern = re.compile(pattern_)\n                for p_name, param in self.named_parameters():\n                    if re.match(pattern, p_name):\n                        pattern_params.append(param)\n                        num_params += param.numel()\n                if len(pattern_params) == 0:\n                    logpy.warn(f\"Did not find parameters for pattern {pattern_}\")\n                params.extend(pattern_params)\n            groups.append({\"params\": params, **args})\n        return groups, num_params\n\n    def configure_optimizers(self) -> List[torch.optim.Optimizer]:\n        if self.trainable_ae_params is None:\n            ae_params = self.get_autoencoder_params()\n        else:\n            ae_params, num_ae_params = self.get_param_groups(\n                self.trainable_ae_params, self.ae_optimizer_args\n            )\n            logpy.info(f\"Number of trainable autoencoder parameters: {num_ae_params:,}\")\n        if self.trainable_disc_params is None:\n            disc_params = self.get_discriminator_params()\n        else:\n            disc_params, num_disc_params = self.get_param_groups(\n                self.trainable_disc_params, self.disc_optimizer_args\n            )","sourceCodeStart":340,"sourceCodeEnd":376,"githubUrl":"https://github.com/Stability-AI/generative-models/blob/e8cd657656fa5d61688191730d0e03242bf4ed44/sgm/models/autoencoder.py#L340-L376","documentation":"get_param_groups builds optimizer parameter groups from regex patterns over named_parameters. When a pattern matches zero parameters it logs a warning 'Did not find parameters for pattern ...' and continues with an empty group — the user likely misspelled a pattern, so part of the model silently gets no (or wrong) training configuration.","triggerScenarios":"Configuring trainable_ae_params / trainable_disc_params with regex patterns like '^encoder\\.' that do not match any parameter names of the autoencoder (e.g. pattern 'decoder.conv_in' when names are prefixed differently, or using '.*disc.*' on a model without a discriminator).","commonSituations":"Copy-pasting optimizer configs between AutoencoderKL variants, typos in YAML regex patterns, switching models where parameter names changed, or freezing everything so the pattern's params are excluded from named_parameters.","solutions":["Print [n for n, _ in model.named_parameters()] and fix the regex patterns to match actual names","Verify trainable_ae_params/trainable_disc_params entries in the config match the model being instantiated","Treat the warning as fatal during development (raise or assert) to catch config mistakes early"],"exampleFix":"// before\ntrainable_ae_params: [[{\"name\": \"decder\", \"pattern\": \"decder\\.\", \"lr\": 1e-4}]]  # typo\n// after\ntrainable_ae_params: [[{\"name\": \"decoder\", \"pattern\": \"^decoder\\.\", \"lr\": 1e-4}]]","handlingStrategy":"validation","validationCode":"import re\nfor group in trainable_params:\n    matched = [n for n, _ in model.named_parameters() if re.search(group[\"pattern\"], n)]\n    assert matched, f\"pattern {group['pattern']} matches nothing\"","typeGuard":"def pattern_matches(model, pattern: str) -> bool:\n    return any(re.search(pattern, n) for n, _ in model.named_parameters())","tryCatchPattern":"try:\n    groups, n = model.get_param_groups()\nexcept Exception:\n    for name, _ in model.named_parameters():\n        print(name)  # debug actual names","preventionTips":["Validate patterns against named_parameters in a startup check","Copy patterns only from the same model variant","Promote the get_param_groups warning to an error in tests"],"tags":["python","regex","optimizer","config","pytorch"],"backgroundTag":"regex-matched-nothing","analyzedSha":"e8cd657656fa5d61688191730d0e03242bf4ed44","analyzedAt":"2026-08-29T11:23:43.234Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}