{"record":{"id":"ddfce874cce400f7","repo":"tensorflow/models","slug":"training-mode-has-to-be-layer-wise-or-end2end","errorCode":null,"errorMessage":"Training mode has to be LAYER-WISE or END2END.","messagePattern":"Training mode has to be LAYER-WISE or END2END\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"official/projects/edgetpu/nlp/mobilebert_edgetpu_trainer.py","lineNumber":356,"sourceCode":"      # Shape: [batch * max_predictions_per_seq]\n      per_example_loss = tf.reshape(\n          -tf.reduce_sum(student_lm_log_probs * lm_label, axis=[-1]), [-1])\n\n      lm_label_weights = tf.reshape(labels['masked_lm_weights'], [-1])\n      lm_numerator_loss = tf.reduce_sum(per_example_loss * lm_label_weights)\n      lm_denominator_loss = tf.reduce_sum(lm_label_weights)\n      mlm_loss = tf.math.divide_no_nan(lm_numerator_loss, lm_denominator_loss)\n      total_loss = mlm_loss\n\n      sentence_labels = labels['next_sentence_labels']\n      sentence_outputs = tf.cast(\n          student_pretrainer_output['next_sentence'], dtype=tf.float32)\n      sentence_loss = tf.reduce_mean(\n          tf_keras.losses.sparse_categorical_crossentropy(\n              sentence_labels, sentence_outputs, from_logits=True))\n      total_loss += sentence_loss\n    else:\n      raise ValueError('Training mode has to be LAYER-WISE or END2END.')\n\n    if self.mode == DistillationMode.LAYER_WISE:\n      self.train_metrics['feature_transfer_mse'].update_state(\n          feature_transfer_loss)  # pyrefly: ignore[unbound-name]\n      self.train_metrics['beta_transfer_loss'].update_state(beta_loss)  # pyrefly: ignore[unbound-name]\n      self.train_metrics['gamma_transfer_loss'].update_state(gamma_loss)  # pyrefly: ignore[unbound-name]\n      self.train_metrics['attention_transfer_loss'].update_state(attention_loss)  # pyrefly: ignore[unbound-name]\n    elif self.mode == DistillationMode.END2END:\n      self.train_metrics['lm_example_loss'].update_state(mlm_loss)  # pyrefly: ignore[unbound-name]\n      self.train_metrics['next_sentence_loss'].update_state(sentence_loss)  # pyrefly: ignore[unbound-name]\n    self.train_metrics['total_loss'].update_state(total_loss)\n\n    return total_loss\n\n  def calculate_accuracy_metrics(self, labels, outputs, metrics):\n    \"\"\"Calculates metrics that are not related to the losses.\"\"\"\n    if self.mode == DistillationMode.END2END:\n      student_pretrainer_output = outputs['student_pretrainer_outputs']","sourceCodeStart":338,"sourceCodeEnd":374,"githubUrl":"https://github.com/tensorflow/models/blob/e006f5f0d534913e49c1f1dae87364039fa607e2/official/projects/edgetpu/nlp/mobilebert_edgetpu_trainer.py#L338-L374","documentation":"Error \"Training mode has to be LAYER-WISE or END2END.\" thrown in tensorflow/models.","triggerScenarios":"Thrown at official/projects/edgetpu/nlp/mobilebert_edgetpu_trainer.py:356 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"}