diff --git a/neural_network/src/MultiMLP.cpp b/neural_network/src/MultiMLP.cpp
index 03d4f73871bd9339663b333c00c2e5e6c7c71f4f..6458022021ae855141059f5a4a7d1faff8de87b9 100644
--- a/neural_network/src/MultiMLP.cpp
+++ b/neural_network/src/MultiMLP.cpp
@@ -90,24 +90,20 @@ std::vector<float> MultiMLP::predict(FeatureModel::FeatureDescription & fd)
 
 float MultiMLP::update(FeatureModel::FeatureDescription & fd, int gold)
 {
-  try
-  {
-    for (auto & mlp : mlps)
+  float loss = 0.0;
+  for (auto & mlp : mlps)
+    try
     {
       int id = std::stoi(split(mlp.name, '_')[1]);
-      float loss = 0.0;
       mlp.setBatchSize(getBatchSize());
-      loss = mlp.update(fd, id == gold ? 1 : 0);
+      loss += mlp.update(fd, id == gold ? 1 : 0);
 
       trainer->update();
-      return loss;
+    } catch (BatchNotFull &)
+    {
     }
-  } catch (BatchNotFull &)
-  {
-    return 0.0;
-  }
 
-  return 0.0;
+  return loss;
 }
 
 float MultiMLP::update(FeatureModel::FeatureDescription &, const std::vector<float> &)
@@ -120,20 +116,15 @@ float MultiMLP::update(FeatureModel::FeatureDescription &, const std::vector<flo
 float MultiMLP::getLoss(FeatureModel::FeatureDescription & fd, int gold)
 {
   float loss = 0.0;
-  try
-  {
-    for (auto & mlp : mlps)
+  for (auto & mlp : mlps)
+    try
     {
       int id = std::stoi(split(mlp.name, '_')[1]);
       mlp.setBatchSize(getBatchSize());
       loss += mlp.getLoss(fd, id == gold ? 1 : 0);
-
-      trainer->update();
+    } catch (BatchNotFull &)
+    {
     }
-  } catch (BatchNotFull &)
-  {
-    return 0.0;
-  }
 
   return loss;
 }