diff --git a/CTCModel.py b/CTCModel.py
index 8b03a457b6c15349786bf48f04fb49617d724f3e..d017529e9f800ded443024af1080b71ca8534818 100644
--- a/CTCModel.py
+++ b/CTCModel.py
@@ -128,6 +128,28 @@ class CTCModel:
         """
         return self.model_eval
 
+    def get_loss_on_batch(self, inputs, verbose=False):
+        """
+        Computation the loss
+        inputs is a list of 4 elements:
+            x_features, y_label, x_len, y_len (similarly to the CTC in tensorflow)
+        :return: Probabilities (output of the TimeDistributedDense layer)
+        """
+
+        x = inputs[0]
+        x_len = inputs[2]
+        y = inputs[1]
+        y_len = inputs[3]
+
+        no_lab = True if 0 in y_len else False
+
+        if no_lab is False:
+            loss_data = self.model_train.predict_on_batch([x, y, x_len, y_len], verbose=verbose)
+
+        loss = np.sum(loss_data)
+
+        return loss, loss_data
+
 
     def get_loss(self, inputs, verbose=False):
         """
@@ -982,7 +1004,7 @@ class CTCModel:
         output.close()
 
 
-    def load_model(self, path_dir, optimizer):
+    def load_model(self, path_dir, optimizer, file_weights=None):
         """ Load a model in path_dir 
         load model_train, model_pred and model_eval from json 
         load inputs and outputs from json
@@ -1030,6 +1052,15 @@ class CTCModel:
 
         self.compile(optimizer)
 
+        if os.path.exists(file_weights):
+            self.model_train.load_weights(file_weights)
+            self.model_pred.set_weights(self.model_train.get_weights())
+            self.model_eval.set_weights(self.model_train.get_weights())
+        elif os.path.exists(path_dir + file_weights):
+            self.model_train.load_weights(path_dir + file_weights)
+            self.model_pred.set_weights(self.model_train.get_weights())
+            self.model_eval.set_weights(self.model_train.get_weights())
+
 
 
 def _standardize_input_data(data, names, shapes=None,