{"record":{"id":"1cdbe7a9bfdbd815","repo":"tensorflow/models","slug":"build-loss-fn-must-be-called-after-build-model","errorCode":null,"errorMessage":"build_loss_fn() must be called after build_model().","messagePattern":"build_loss_fn\\(\\) must be called after build_model\\(\\)\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"official/legacy/detection/modeling/maskrcnn_model.py","lineNumber":189,"sourceCode":"    mask_roi_features = spatial_transform_ops.multilevel_crop_and_resize(\n        fpn_features, rpn_rois, output_size=14)\n\n    mask_outputs = self._mrcnn_head_fn(mask_roi_features, classes, is_training)\n\n    if is_training:\n      model_outputs.update({\n          'mask_outputs':\n              tf.nest.map_structure(lambda x: tf.cast(x, tf.float32),\n                                    mask_outputs),\n      })\n    else:\n      model_outputs.update({'detection_masks': tf.nn.sigmoid(mask_outputs)})\n\n    return model_outputs\n\n  def build_loss_fn(self):\n    if self._keras_model is None:\n      raise ValueError('build_loss_fn() must be called after build_model().')\n\n    filter_fn = self.make_filter_trainable_variables_fn()\n    trainable_variables = filter_fn(self._keras_model.trainable_variables)\n\n    def _total_loss_fn(labels, outputs):\n      rpn_score_loss = self._rpn_score_loss_fn(outputs['rpn_score_outputs'],\n                                               labels['rpn_score_targets'])\n      rpn_box_loss = self._rpn_box_loss_fn(outputs['rpn_box_outputs'],\n                                           labels['rpn_box_targets'])\n\n      frcnn_class_loss = self._frcnn_class_loss_fn(outputs['class_outputs'],\n                                                   outputs['class_targets'])\n      frcnn_box_loss = self._frcnn_box_loss_fn(outputs['box_outputs'],\n                                               outputs['class_targets'],\n                                               outputs['box_targets'])\n\n      if self._include_mask:\n        mask_loss = self._mask_loss_fn(outputs['mask_outputs'],","sourceCodeStart":171,"sourceCodeEnd":207,"githubUrl":"https://github.com/tensorflow/models/blob/e006f5f0d534913e49c1f1dae87364039fa607e2/official/legacy/detection/modeling/maskrcnn_model.py#L171-L207","documentation":"Error \"build_loss_fn() must be called after build_model().\" thrown in tensorflow/models.","triggerScenarios":"Thrown at official/legacy/detection/modeling/maskrcnn_model.py:189 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"e006f5f0d534913e49c1f1dae87364039fa607e2","analyzedAt":"2026-08-24T14:09:15.576Z","schemaVersion":2},"datasetVersion":"2026-08-24T17:17:21.512Z"}