From ee32fe3c8bf1cd0964af2d45a52aff32d3ea4202 Mon Sep 17 00:00:00 2001
From: Tiago Freitas Pereira <tiagofrepereira@gmail.com>
Date: Wed, 11 Oct 2017 14:52:44 +0200
Subject: [PATCH] I don't know why I'm commiting this. Suddenly everything was
 updated with nothing

---
 .gitignore                                    |   0
 .gitlab-ci.yml                                |   0
 LICENSE                                       |   0
 MANIFEST.in                                   |   0
 README.rst                                    |   0
 bob/__init__.py                               |   0
 bob/learn/__init__.py                         |   0
 bob/learn/tensorflow/__init__.py              |   0
 .../analyzers/ExperimentAnalizer.py           |   0
 .../tensorflow/analyzers/SoftmaxAnalizer.py   |   0
 bob/learn/tensorflow/analyzers/__init__.py    |   0
 bob/learn/tensorflow/datashuffler/Base.py     |  12 +--
 .../datashuffler/DataAugmentation.py          |   0
 bob/learn/tensorflow/datashuffler/Disk.py     |   0
 .../tensorflow/datashuffler/DiskAudio.py      |   0
 .../datashuffler/ImageAugmentation.py         |   0
 bob/learn/tensorflow/datashuffler/Memory.py   |   0
 .../tensorflow/datashuffler/Normalizer.py     |  15 +++-
 .../tensorflow/datashuffler/OnlineSampling.py |   0
 bob/learn/tensorflow/datashuffler/Siamese.py  |   0
 .../tensorflow/datashuffler/SiameseDisk.py    |   0
 .../tensorflow/datashuffler/SiameseMemory.py  |   0
 bob/learn/tensorflow/datashuffler/TFRecord.py |   2 +-
 .../tensorflow/datashuffler/TFRecordImage.py  |   8 +-
 bob/learn/tensorflow/datashuffler/Triplet.py  |   0
 .../tensorflow/datashuffler/TripletDisk.py    |   0
 .../tensorflow/datashuffler/TripletMemory.py  |   0
 .../TripletWithFastSelectionDisk.py           |   0
 .../datashuffler/TripletWithSelectionDisk.py  |   0
 .../TripletWithSelectionMemory.py             |   0
 bob/learn/tensorflow/datashuffler/__init__.py |   3 +-
 .../tensorflow/initialization/__init__.py     |   0
 bob/learn/tensorflow/layers/Conv1D.py         |   0
 bob/learn/tensorflow/layers/Layer.py          |   0
 bob/learn/tensorflow/layers/Maxout.py         |   0
 bob/learn/tensorflow/layers/__init__.py       |   0
 bob/learn/tensorflow/loss/BaseLoss.py         |   0
 bob/learn/tensorflow/loss/ContrastiveLoss.py  |   7 +-
 bob/learn/tensorflow/loss/NegLogLoss.py       |   0
 .../tensorflow/loss/TripletAverageLoss.py     |   0
 .../tensorflow/loss/TripletFisherLoss.py      |   0
 bob/learn/tensorflow/loss/TripletLoss.py      |   0
 bob/learn/tensorflow/loss/__init__.py         |   0
 bob/learn/tensorflow/network/Chopra.py        |   0
 bob/learn/tensorflow/network/Dummy.py         |   0
 bob/learn/tensorflow/network/Embedding.py     |   0
 .../tensorflow/network/InceptionResnetV1.py   |   0
 .../tensorflow/network/InceptionResnetV2.py   |   0
 bob/learn/tensorflow/network/LightCNN29.py    |   0
 bob/learn/tensorflow/network/LightCNN9.py     |   0
 bob/learn/tensorflow/network/MLP.py           |   0
 bob/learn/tensorflow/network/__init__.py      |   0
 bob/learn/tensorflow/network/utils.py         |   0
 bob/learn/tensorflow/script/__init__.py       |   0
 .../tensorflow/script/compute_statistics.py   |   0
 .../tensorflow/script/db_to_tfrecords.py      |  11 ++-
 .../tensorflow/script/lfw_db_to_tfrecords.py  |  70 ++++++++----------
 bob/learn/tensorflow/script/load_and_debug.py |   0
 bob/learn/tensorflow/script/train.py          |   8 +-
 bob/learn/tensorflow/test/__init__.py         |   0
 .../tensorflow/test/data/cnn_mnist/checkpoint |   0
 .../tensorflow/test/data/cnn_mnist/model.ckp  | Bin
 .../test/data/cnn_mnist/model.ckp.meta        | Bin
 .../cnn_mnist/model.ckp_sequence_net.pickle   |   0
 .../data/dummy_audio/attack_sentence01.wav    | Bin
 .../data/dummy_audio/genuine_sentence01.wav   | Bin
 .../data/dummy_database/m301_01_p01_i0_0.hdf5 | Bin
 .../data/dummy_database/m301_01_p02_i0_0.hdf5 | Bin
 .../data/dummy_database/m304_01_p01_i0_0.hdf5 | Bin
 .../data/dummy_database/m304_02_f12_i0_0.hdf5 | Bin
 .../test/data/dummy_verify_config.py          |   0
 .../test/data/train_scripts/siamese.py        |   0
 .../test/data/train_scripts/softmax.py        |   0
 .../test/data/train_scripts/triplet.py        |   0
 bob/learn/tensorflow/test/test_cnn.py         |   0
 .../tensorflow/test/test_cnn_other_losses.py  |  45 ++++++++---
 .../tensorflow/test/test_cnn_prefetch.py      |   0
 .../test/test_cnn_pretrained_model.py         |   0
 bob/learn/tensorflow/test/test_cnn_scratch.py |   0
 .../test_cnn_trainable_variables_select.py    |   0
 .../tensorflow/test/test_datashuffler.py      |   0
 .../test/test_datashuffler_augmentation.py    |   0
 .../tensorflow/test/test_db_to_tfrecords.py   |   0
 bob/learn/tensorflow/test/test_dnn.py         |   0
 bob/learn/tensorflow/test/test_inception.py   |   0
 bob/learn/tensorflow/test/test_layers.py      |   0
 .../tensorflow/test/test_train_script.py      |   0
 bob/learn/tensorflow/test/test_utils.py       |   0
 .../tensorflow/trainers/SiameseTrainer.py     |   6 ++
 bob/learn/tensorflow/trainers/Trainer.py      |  22 ++++--
 .../tensorflow/trainers/TripletTrainer.py     |   0
 bob/learn/tensorflow/trainers/__init__.py     |   0
 .../tensorflow/trainers/learning_rate.py      |   0
 bob/learn/tensorflow/utils/__init__.py        |   0
 bob/learn/tensorflow/utils/session.py         |   0
 bob/learn/tensorflow/utils/singleton.py       |   0
 bob/learn/tensorflow/utils/util.py            |   0
 bootstrap-buildout.py                         |   0
 buildout.cfg                                  |   0
 develop.cfg                                   |   0
 doc/conf.py                                   |   0
 doc/extra-intersphinx.txt                     |   0
 doc/img/favicon.ico                           | Bin
 doc/img/logo.png                              | Bin
 doc/index.rst                                 |   0
 doc/nitpick-exceptions.txt                    |   0
 doc/py_api.rst                                |   0
 doc/references.rst                            |   0
 doc/user_guide.rst                            |   0
 requirements.txt                              |   0
 setup.py                                      |   0
 version.txt                                   |   0
 112 files changed, 140 insertions(+), 69 deletions(-)
 mode change 100644 => 100755 .gitignore
 mode change 100644 => 100755 .gitlab-ci.yml
 mode change 100644 => 100755 LICENSE
 mode change 100644 => 100755 MANIFEST.in
 mode change 100644 => 100755 README.rst
 mode change 100644 => 100755 bob/__init__.py
 mode change 100644 => 100755 bob/learn/__init__.py
 mode change 100644 => 100755 bob/learn/tensorflow/__init__.py
 mode change 100644 => 100755 bob/learn/tensorflow/analyzers/ExperimentAnalizer.py
 mode change 100644 => 100755 bob/learn/tensorflow/analyzers/SoftmaxAnalizer.py
 mode change 100644 => 100755 bob/learn/tensorflow/analyzers/__init__.py
 mode change 100644 => 100755 bob/learn/tensorflow/datashuffler/Base.py
 mode change 100644 => 100755 bob/learn/tensorflow/datashuffler/DataAugmentation.py
 mode change 100644 => 100755 bob/learn/tensorflow/datashuffler/Disk.py
 mode change 100644 => 100755 bob/learn/tensorflow/datashuffler/DiskAudio.py
 mode change 100644 => 100755 bob/learn/tensorflow/datashuffler/ImageAugmentation.py
 mode change 100644 => 100755 bob/learn/tensorflow/datashuffler/Memory.py
 mode change 100644 => 100755 bob/learn/tensorflow/datashuffler/Normalizer.py
 mode change 100644 => 100755 bob/learn/tensorflow/datashuffler/OnlineSampling.py
 mode change 100644 => 100755 bob/learn/tensorflow/datashuffler/Siamese.py
 mode change 100644 => 100755 bob/learn/tensorflow/datashuffler/SiameseDisk.py
 mode change 100644 => 100755 bob/learn/tensorflow/datashuffler/SiameseMemory.py
 mode change 100644 => 100755 bob/learn/tensorflow/datashuffler/TFRecord.py
 mode change 100644 => 100755 bob/learn/tensorflow/datashuffler/TFRecordImage.py
 mode change 100644 => 100755 bob/learn/tensorflow/datashuffler/Triplet.py
 mode change 100644 => 100755 bob/learn/tensorflow/datashuffler/TripletDisk.py
 mode change 100644 => 100755 bob/learn/tensorflow/datashuffler/TripletMemory.py
 mode change 100644 => 100755 bob/learn/tensorflow/datashuffler/TripletWithFastSelectionDisk.py
 mode change 100644 => 100755 bob/learn/tensorflow/datashuffler/TripletWithSelectionDisk.py
 mode change 100644 => 100755 bob/learn/tensorflow/datashuffler/TripletWithSelectionMemory.py
 mode change 100644 => 100755 bob/learn/tensorflow/datashuffler/__init__.py
 mode change 100644 => 100755 bob/learn/tensorflow/initialization/__init__.py
 mode change 100644 => 100755 bob/learn/tensorflow/layers/Conv1D.py
 mode change 100644 => 100755 bob/learn/tensorflow/layers/Layer.py
 mode change 100644 => 100755 bob/learn/tensorflow/layers/Maxout.py
 mode change 100644 => 100755 bob/learn/tensorflow/layers/__init__.py
 mode change 100644 => 100755 bob/learn/tensorflow/loss/BaseLoss.py
 mode change 100644 => 100755 bob/learn/tensorflow/loss/ContrastiveLoss.py
 mode change 100644 => 100755 bob/learn/tensorflow/loss/NegLogLoss.py
 mode change 100644 => 100755 bob/learn/tensorflow/loss/TripletAverageLoss.py
 mode change 100644 => 100755 bob/learn/tensorflow/loss/TripletFisherLoss.py
 mode change 100644 => 100755 bob/learn/tensorflow/loss/TripletLoss.py
 mode change 100644 => 100755 bob/learn/tensorflow/loss/__init__.py
 mode change 100644 => 100755 bob/learn/tensorflow/network/Chopra.py
 mode change 100644 => 100755 bob/learn/tensorflow/network/Dummy.py
 mode change 100644 => 100755 bob/learn/tensorflow/network/Embedding.py
 mode change 100644 => 100755 bob/learn/tensorflow/network/InceptionResnetV1.py
 mode change 100644 => 100755 bob/learn/tensorflow/network/InceptionResnetV2.py
 mode change 100644 => 100755 bob/learn/tensorflow/network/LightCNN29.py
 mode change 100644 => 100755 bob/learn/tensorflow/network/LightCNN9.py
 mode change 100644 => 100755 bob/learn/tensorflow/network/MLP.py
 mode change 100644 => 100755 bob/learn/tensorflow/network/__init__.py
 mode change 100644 => 100755 bob/learn/tensorflow/network/utils.py
 mode change 100644 => 100755 bob/learn/tensorflow/script/__init__.py
 mode change 100644 => 100755 bob/learn/tensorflow/script/compute_statistics.py
 mode change 100644 => 100755 bob/learn/tensorflow/script/lfw_db_to_tfrecords.py
 mode change 100644 => 100755 bob/learn/tensorflow/script/load_and_debug.py
 mode change 100644 => 100755 bob/learn/tensorflow/script/train.py
 mode change 100644 => 100755 bob/learn/tensorflow/test/__init__.py
 mode change 100644 => 100755 bob/learn/tensorflow/test/data/cnn_mnist/checkpoint
 mode change 100644 => 100755 bob/learn/tensorflow/test/data/cnn_mnist/model.ckp
 mode change 100644 => 100755 bob/learn/tensorflow/test/data/cnn_mnist/model.ckp.meta
 mode change 100644 => 100755 bob/learn/tensorflow/test/data/cnn_mnist/model.ckp_sequence_net.pickle
 mode change 100644 => 100755 bob/learn/tensorflow/test/data/dummy_audio/attack_sentence01.wav
 mode change 100644 => 100755 bob/learn/tensorflow/test/data/dummy_audio/genuine_sentence01.wav
 mode change 100644 => 100755 bob/learn/tensorflow/test/data/dummy_database/m301_01_p01_i0_0.hdf5
 mode change 100644 => 100755 bob/learn/tensorflow/test/data/dummy_database/m301_01_p02_i0_0.hdf5
 mode change 100644 => 100755 bob/learn/tensorflow/test/data/dummy_database/m304_01_p01_i0_0.hdf5
 mode change 100644 => 100755 bob/learn/tensorflow/test/data/dummy_database/m304_02_f12_i0_0.hdf5
 mode change 100644 => 100755 bob/learn/tensorflow/test/data/dummy_verify_config.py
 mode change 100644 => 100755 bob/learn/tensorflow/test/data/train_scripts/siamese.py
 mode change 100644 => 100755 bob/learn/tensorflow/test/data/train_scripts/softmax.py
 mode change 100644 => 100755 bob/learn/tensorflow/test/data/train_scripts/triplet.py
 mode change 100644 => 100755 bob/learn/tensorflow/test/test_cnn.py
 mode change 100644 => 100755 bob/learn/tensorflow/test/test_cnn_other_losses.py
 mode change 100644 => 100755 bob/learn/tensorflow/test/test_cnn_prefetch.py
 mode change 100644 => 100755 bob/learn/tensorflow/test/test_cnn_pretrained_model.py
 mode change 100644 => 100755 bob/learn/tensorflow/test/test_cnn_scratch.py
 mode change 100644 => 100755 bob/learn/tensorflow/test/test_cnn_trainable_variables_select.py
 mode change 100644 => 100755 bob/learn/tensorflow/test/test_datashuffler.py
 mode change 100644 => 100755 bob/learn/tensorflow/test/test_datashuffler_augmentation.py
 mode change 100644 => 100755 bob/learn/tensorflow/test/test_db_to_tfrecords.py
 mode change 100644 => 100755 bob/learn/tensorflow/test/test_dnn.py
 mode change 100644 => 100755 bob/learn/tensorflow/test/test_inception.py
 mode change 100644 => 100755 bob/learn/tensorflow/test/test_layers.py
 mode change 100644 => 100755 bob/learn/tensorflow/test/test_train_script.py
 mode change 100644 => 100755 bob/learn/tensorflow/test/test_utils.py
 mode change 100644 => 100755 bob/learn/tensorflow/trainers/SiameseTrainer.py
 mode change 100644 => 100755 bob/learn/tensorflow/trainers/Trainer.py
 mode change 100644 => 100755 bob/learn/tensorflow/trainers/TripletTrainer.py
 mode change 100644 => 100755 bob/learn/tensorflow/trainers/__init__.py
 mode change 100644 => 100755 bob/learn/tensorflow/trainers/learning_rate.py
 mode change 100644 => 100755 bob/learn/tensorflow/utils/__init__.py
 mode change 100644 => 100755 bob/learn/tensorflow/utils/session.py
 mode change 100644 => 100755 bob/learn/tensorflow/utils/singleton.py
 mode change 100644 => 100755 bob/learn/tensorflow/utils/util.py
 mode change 100644 => 100755 bootstrap-buildout.py
 mode change 100644 => 100755 buildout.cfg
 mode change 100644 => 100755 develop.cfg
 mode change 100644 => 100755 doc/conf.py
 mode change 100644 => 100755 doc/extra-intersphinx.txt
 mode change 100644 => 100755 doc/img/favicon.ico
 mode change 100644 => 100755 doc/img/logo.png
 mode change 100644 => 100755 doc/index.rst
 mode change 100644 => 100755 doc/nitpick-exceptions.txt
 mode change 100644 => 100755 doc/py_api.rst
 mode change 100644 => 100755 doc/references.rst
 mode change 100644 => 100755 doc/user_guide.rst
 mode change 100644 => 100755 requirements.txt
 mode change 100644 => 100755 setup.py
 mode change 100644 => 100755 version.txt

diff --git a/.gitignore b/.gitignore
old mode 100644
new mode 100755
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
old mode 100644
new mode 100755
diff --git a/LICENSE b/LICENSE
old mode 100644
new mode 100755
diff --git a/MANIFEST.in b/MANIFEST.in
old mode 100644
new mode 100755
diff --git a/README.rst b/README.rst
old mode 100644
new mode 100755
diff --git a/bob/__init__.py b/bob/__init__.py
old mode 100644
new mode 100755
diff --git a/bob/learn/__init__.py b/bob/learn/__init__.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/__init__.py b/bob/learn/tensorflow/__init__.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/analyzers/ExperimentAnalizer.py b/bob/learn/tensorflow/analyzers/ExperimentAnalizer.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/analyzers/SoftmaxAnalizer.py b/bob/learn/tensorflow/analyzers/SoftmaxAnalizer.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/analyzers/__init__.py b/bob/learn/tensorflow/analyzers/__init__.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/datashuffler/Base.py b/bob/learn/tensorflow/datashuffler/Base.py
old mode 100644
new mode 100755
index fbf44654..39af44ae
--- a/bob/learn/tensorflow/datashuffler/Base.py
+++ b/bob/learn/tensorflow/datashuffler/Base.py
@@ -191,10 +191,10 @@ class Base(object):
                 dst = numpy.reshape(dst, self.input_shape[1:4])
             else:
                 #dst = numpy.resize(data, self.bob_shape) # Scaling with numpy, because bob is c,w,d instead of w,h,c
-                #dst = numpy.zeros(shape=(data.shape[0], data.shape[1], 3))
-                #dst[:, :, 0] = data[:, :, 0]
-                #dst[:, :, 1] = data[:, :, 0]
-                #dst[:, :, 2] = data[:, :, 0]
+                dst = numpy.zeros(shape=(data.shape[0], data.shape[1], 3))
+                dst[:, :, 0] = data[:, :, 0]
+                dst[:, :, 1] = data[:, :, 0]
+                dst[:, :, 2] = data[:, :, 0]
 
                 # TODO: LAME SOLUTION
                 #if data.shape[0] != 3:  # GRAY SCALE IMAGES IN A RGB DATABASE
@@ -204,8 +204,8 @@ class Base(object):
                     #step_data[1, ...] = data[:, :, 0]
                     #step_data[2, ...] = data[:, :, 0]
                     #data = step_data
-                dst = numpy.zeros(shape=(self.bob_shape))
-                bob.ip.base.scale(data, dst)
+                #dst = numpy.zeros(shape=(self.bob_shape))
+                #bob.ip.base.scale(data, dst)
 
             return dst
         else:
diff --git a/bob/learn/tensorflow/datashuffler/DataAugmentation.py b/bob/learn/tensorflow/datashuffler/DataAugmentation.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/datashuffler/Disk.py b/bob/learn/tensorflow/datashuffler/Disk.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/datashuffler/DiskAudio.py b/bob/learn/tensorflow/datashuffler/DiskAudio.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/datashuffler/ImageAugmentation.py b/bob/learn/tensorflow/datashuffler/ImageAugmentation.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/datashuffler/Memory.py b/bob/learn/tensorflow/datashuffler/Memory.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/datashuffler/Normalizer.py b/bob/learn/tensorflow/datashuffler/Normalizer.py
old mode 100644
new mode 100755
index 74e264ef..3c8935e8
--- a/bob/learn/tensorflow/datashuffler/Normalizer.py
+++ b/bob/learn/tensorflow/datashuffler/Normalizer.py
@@ -1,8 +1,8 @@
 #!/usr/bin/env python
 # vim: set fileencoding=utf-8 :
 # @author: Tiago de Freitas Pereira <tiago.pereira@idiap.ch>
-# @date: Mon 07 Nov 2016 09:39:36 CET
 
+import numpy
 
 class ScaleFactor(object):
     """
@@ -40,3 +40,16 @@ class Linear(object):
         return x
 
 
+
+class PerImageStandarization(object):
+
+    def __init__(self):
+        pass
+
+    def __call__(self, x):
+    
+        mean = numpy.mean(x)
+        std = numpy.std(x)
+
+        return (x-mean)/max(std, 1/numpy.sqrt(numpy.prod(x.shape)))
+
diff --git a/bob/learn/tensorflow/datashuffler/OnlineSampling.py b/bob/learn/tensorflow/datashuffler/OnlineSampling.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/datashuffler/Siamese.py b/bob/learn/tensorflow/datashuffler/Siamese.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/datashuffler/SiameseDisk.py b/bob/learn/tensorflow/datashuffler/SiameseDisk.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/datashuffler/SiameseMemory.py b/bob/learn/tensorflow/datashuffler/SiameseMemory.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/datashuffler/TFRecord.py b/bob/learn/tensorflow/datashuffler/TFRecord.py
old mode 100644
new mode 100755
index 34ad207f..337a49e6
--- a/bob/learn/tensorflow/datashuffler/TFRecord.py
+++ b/bob/learn/tensorflow/datashuffler/TFRecord.py
@@ -28,7 +28,7 @@ class TFRecord(object):
                          input_dtype=tf.float32,
                          batch_size=32,
                          seed=10,
-                         prefetch_capacity=50,
+                         prefetch_capacity=1000,
                          prefetch_threads=5):
 
         # Setting the seed for the pseudo random number generator
diff --git a/bob/learn/tensorflow/datashuffler/TFRecordImage.py b/bob/learn/tensorflow/datashuffler/TFRecordImage.py
old mode 100644
new mode 100755
index 1c581f61..0b4f41a0
--- a/bob/learn/tensorflow/datashuffler/TFRecordImage.py
+++ b/bob/learn/tensorflow/datashuffler/TFRecordImage.py
@@ -39,7 +39,7 @@ class TFRecordImage(TFRecord):
                          input_dtype=tf.uint8,
                          batch_size=32,
                          seed=10,
-                         prefetch_capacity=50,
+                         prefetch_capacity=1000,
                          prefetch_threads=5, 
                          shuffle=True,
                          normalization=False,
@@ -73,6 +73,7 @@ class TFRecordImage(TFRecord):
         self.shuffle = shuffle
         self.normalization = normalization
         self.random_crop = random_crop
+        self.random_flip = random_flip
         self.gray_scale = gray_scale
 
     def __call__(self, element, from_queue=False):
@@ -127,6 +128,9 @@ class TFRecordImage(TFRecord):
         
         if self.random_crop:
             image = tf.image.resize_image_with_crop_or_pad(image, self.output_shape[1], self.output_shape[2])
+            
+        if self.random_flip:
+            image = tf.image.random_flip_left_right(image)
 
         # normalizing data
         if self.normalization:
@@ -138,7 +142,7 @@ class TFRecordImage(TFRecord):
         if self.shuffle:
             data_ph, label_ph = tf.train.shuffle_batch([image, label], batch_size=self.batch_size,
                              capacity=self.prefetch_capacity, num_threads=self.prefetch_threads,
-                             min_after_dequeue=1, name="shuffle_batch")
+                             min_after_dequeue=self.prefetch_capacity//2, name="shuffle_batch")
         else:
             data_ph, label_ph = tf.train.batch([image, label], batch_size=self.batch_size,
                              capacity=self.prefetch_capacity, num_threads=self.prefetch_threads, name="batch")
diff --git a/bob/learn/tensorflow/datashuffler/Triplet.py b/bob/learn/tensorflow/datashuffler/Triplet.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/datashuffler/TripletDisk.py b/bob/learn/tensorflow/datashuffler/TripletDisk.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/datashuffler/TripletMemory.py b/bob/learn/tensorflow/datashuffler/TripletMemory.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/datashuffler/TripletWithFastSelectionDisk.py b/bob/learn/tensorflow/datashuffler/TripletWithFastSelectionDisk.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/datashuffler/TripletWithSelectionDisk.py b/bob/learn/tensorflow/datashuffler/TripletWithSelectionDisk.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/datashuffler/TripletWithSelectionMemory.py b/bob/learn/tensorflow/datashuffler/TripletWithSelectionMemory.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/datashuffler/__init__.py b/bob/learn/tensorflow/datashuffler/__init__.py
old mode 100644
new mode 100755
index 0065af47..40fa89e9
--- a/bob/learn/tensorflow/datashuffler/__init__.py
+++ b/bob/learn/tensorflow/datashuffler/__init__.py
@@ -18,12 +18,13 @@ from .TripletWithSelectionDisk import TripletWithSelectionDisk
 from .DataAugmentation import DataAugmentation
 from .ImageAugmentation import ImageAugmentation
 
-from .Normalizer import ScaleFactor, MeanOffset, Linear
+from .Normalizer import ScaleFactor, MeanOffset, Linear, PerImageStandarization
 
 from .DiskAudio import DiskAudio
 from .TFRecord import TFRecord
 from .TFRecordImage import TFRecordImage
 
+
 # gets sphinx autodoc done right - don't remove it
 def __appropriate__(*args):
   """Says object was actually declared here, an not on the import module.
diff --git a/bob/learn/tensorflow/initialization/__init__.py b/bob/learn/tensorflow/initialization/__init__.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/layers/Conv1D.py b/bob/learn/tensorflow/layers/Conv1D.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/layers/Layer.py b/bob/learn/tensorflow/layers/Layer.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/layers/Maxout.py b/bob/learn/tensorflow/layers/Maxout.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/layers/__init__.py b/bob/learn/tensorflow/layers/__init__.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/loss/BaseLoss.py b/bob/learn/tensorflow/loss/BaseLoss.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/loss/ContrastiveLoss.py b/bob/learn/tensorflow/loss/ContrastiveLoss.py
old mode 100644
new mode 100755
index 0d1655b2..4c25a981
--- a/bob/learn/tensorflow/loss/ContrastiveLoss.py
+++ b/bob/learn/tensorflow/loss/ContrastiveLoss.py
@@ -48,10 +48,11 @@ class ContrastiveLoss(BaseLoss):
             one = tf.constant(1.0)
 
             d = compute_euclidean_distance(left_feature, right_feature)
-            between_class = tf.multiply(one - label, tf.square(d))  # (1-Y)*(d^2)
+            within_class = tf.multiply(one - label, tf.square(d))  # (1-Y)*(d^2)
+            
+            
             max_part = tf.square(tf.maximum(self.contrastive_margin - d, 0))
-
-            within_class = tf.multiply(label, max_part)  # (Y) * max((margin - d)^2, 0)
+            between_class = tf.multiply(label, max_part)  # (Y) * max((margin - d)^2, 0)
 
             loss = 0.5 * (within_class + between_class)
 
diff --git a/bob/learn/tensorflow/loss/NegLogLoss.py b/bob/learn/tensorflow/loss/NegLogLoss.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/loss/TripletAverageLoss.py b/bob/learn/tensorflow/loss/TripletAverageLoss.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/loss/TripletFisherLoss.py b/bob/learn/tensorflow/loss/TripletFisherLoss.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/loss/TripletLoss.py b/bob/learn/tensorflow/loss/TripletLoss.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/loss/__init__.py b/bob/learn/tensorflow/loss/__init__.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/network/Chopra.py b/bob/learn/tensorflow/network/Chopra.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/network/Dummy.py b/bob/learn/tensorflow/network/Dummy.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/network/Embedding.py b/bob/learn/tensorflow/network/Embedding.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/network/InceptionResnetV1.py b/bob/learn/tensorflow/network/InceptionResnetV1.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/network/InceptionResnetV2.py b/bob/learn/tensorflow/network/InceptionResnetV2.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/network/LightCNN29.py b/bob/learn/tensorflow/network/LightCNN29.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/network/LightCNN9.py b/bob/learn/tensorflow/network/LightCNN9.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/network/MLP.py b/bob/learn/tensorflow/network/MLP.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/network/__init__.py b/bob/learn/tensorflow/network/__init__.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/network/utils.py b/bob/learn/tensorflow/network/utils.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/script/__init__.py b/bob/learn/tensorflow/script/__init__.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/script/compute_statistics.py b/bob/learn/tensorflow/script/compute_statistics.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/script/db_to_tfrecords.py b/bob/learn/tensorflow/script/db_to_tfrecords.py
index 7289c6d0..10cc5c19 100644
--- a/bob/learn/tensorflow/script/db_to_tfrecords.py
+++ b/bob/learn/tensorflow/script/db_to_tfrecords.py
@@ -3,7 +3,7 @@
 """Converts Bio and PAD datasets to TFRecords file formats.
 
 Usage:
-  %(prog)s <config_files>...
+  %(prog)s <config_files>... [--allow-missing-files]
   %(prog)s --help
   %(prog)s --version
 
@@ -117,6 +117,7 @@ def main(argv=None):
     args = docopt(docs, argv=argv, version=version)
     config_files = args['<config_files>']
     config = read_config_file(config_files)
+    allow_missing_files = args['--allow-missing-files']
 
     # Sets-up logging
     verbosity = getattr(config, 'verbose', 0)
@@ -148,6 +149,14 @@ def main(argv=None):
 
                 path = f.make_path(data_dir, data_extension)
                 data = reader(path)
+                
+                if data is None:
+                  if allow_missing_files:
+                      logger.debug("... Processing original data file '{0}' was not successful".format(path))
+                      continue
+                  else:
+                      raise RuntimeError("Preprocessing of file '{0}' was not successful".format(path))
+                
                 label = file_to_label(f)
 
                 if one_file_one_sample:
diff --git a/bob/learn/tensorflow/script/lfw_db_to_tfrecords.py b/bob/learn/tensorflow/script/lfw_db_to_tfrecords.py
old mode 100644
new mode 100755
index b0625ed5..9447bf62
--- a/bob/learn/tensorflow/script/lfw_db_to_tfrecords.py
+++ b/bob/learn/tensorflow/script/lfw_db_to_tfrecords.py
@@ -12,7 +12,7 @@ Options:
   <data-path>          Path that contains the features
   --extension=<arg>    Default feature extension   [default: .hdf5]
   --protocol=<arg>     One of the LFW protocols    [default: view1]
-  --data-type=<arg>    TFRecord data type [default: float32]
+  --data-type=<arg>    TFRecord data type [default: uint8]
 
 
 The possible protocol options are the following:
@@ -49,25 +49,14 @@ def file_to_label(client_ids, f):
 
 def get_pairs(all_pairs, match=True):
 
-    pairs = []
+    enroll = []
+    probe = []
     for p in all_pairs:
         if p.is_match == match:
-            pairs.append(p.enroll_file)
-            pairs.append(p.probe_file)
+            enroll.append(p.enroll_file)
+            probe.append(p.probe_file)
 
-    return pairs
-
-def bob2skimage(bob_image):
-    """
-    Convert bob color image to the skcit image
-    """
-
-    skimage = numpy.zeros(shape=(bob_image.shape[1], bob_image.shape[2], bob_image.shape[0]))
-    skimage[:, :, 2] = bob_image[0, :, :]
-    skimage[:, :, 1] = bob_image[1, :, :]    
-    skimage[:, :, 0] = bob_image[2, :, :]
-
-    return skimage
+    return enroll, probe
 
 
 def main(argv=None):
@@ -80,9 +69,6 @@ def main(argv=None):
     protocol    = args['--protocol']
     data_type   = args['--data-type']
     
-    #Setting the reader
-    reader = bob.io.base.load
-
     # Sets-up logging
     if args['--verbose']:
         verbosity = 2
@@ -90,28 +76,36 @@ def main(argv=None):
 
     # Loading LFW models
     database = bob.db.lfw.Database()
-    all_pairs = get_pairs(database.pairs(protocol=protocol), match=True)
-    client_ids = list(set([f.client_id for f in all_pairs]))
-    client_ids = dict(zip(client_ids, range(len(client_ids))))
+    enroll, probe = get_pairs(database.pairs(protocol=protocol), match=True)
+    #client_ids = list(set([f.client_id for f in all_pairs]))
     
-    create_directories_safe(os.path.dirname(output_file))
-
-    n_files = len(all_pairs)
-    with tf.python_io.TFRecordWriter(output_file) as writer:
-      for i, f in enumerate(all_pairs):
-        logger.info('Processing file %d out of %d', i + 1, n_files)
-
-        path = f.make_path(data_path, extension)
-        #data = reader(path).astype('uint8').tostring()
-        img = bob2skimage(reader(path)).astype(data_type)
-        data = img.tostring()
+    client_ids = list(set([f.client_id for f in enroll] + [f.client_id for f in probe]))   
+    client_ids = dict(zip(client_ids, range(len(client_ids))))
 
-        feature = {'train/data': _bytes_feature(data),
-                   'train/label': _int64_feature(file_to_label(client_ids, f))}
+    create_directories_safe(os.path.dirname(output_file))
 
-        example = tf.train.Example(features=tf.train.Features(feature=feature))
-        writer.write(example.SerializeToString())
+    import ipdb; ipdb.set_trace()
 
+    n_files = len(enroll)
+    with tf.python_io.TFRecordWriter(output_file) as writer:
+      for e, p, i in zip(enroll, probe, range(len(enroll)) ):
+        logger.info('Processing pair %d out of %d', i + 1, n_files)
+
+        e_path = e.make_path(data_path, extension)
+        p_path = p.make_path(data_path, extension)
+        
+        if os.path.exists(p_path) and os.path.exists(e_path):        
+            for path in [e_path, p_path]:
+                data = bob.io.image.to_matplotlib(bob.io.base.load(path)).astype(data_type)
+                data = data.tostring()
+
+                feature = {'train/data': _bytes_feature(data),
+                           'train/label': _int64_feature(file_to_label(client_ids, f))}
+
+                example = tf.train.Example(features=tf.train.Features(feature=feature))
+                writer.write(example.SerializeToString())
+        else:
+            logger.debug("... Processing original data file '{0}' was not successful".format(path))
 
 if __name__ == '__main__':
   main()
diff --git a/bob/learn/tensorflow/script/load_and_debug.py b/bob/learn/tensorflow/script/load_and_debug.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/script/train.py b/bob/learn/tensorflow/script/train.py
old mode 100644
new mode 100755
index d94706e1..d177aca7
--- a/bob/learn/tensorflow/script/train.py
+++ b/bob/learn/tensorflow/script/train.py
@@ -87,6 +87,11 @@ def main():
     if hasattr(config, 'validation_data_shuffler'):
         validation_data_shuffler = config.validation_data_shuffler
 
+    prelogits = None
+    if hasattr(config, 'prelogits'):
+        prelogits = config.prelogits
+
+
     trainer = config.Trainer(config.train_data_shuffler,
                              validation_data_shuffler=validation_data_shuffler,
                              validate_with_embeddings=validate_with_embeddings,
@@ -128,6 +133,7 @@ def main():
                                             validation_graph=validation_graph,
                                             loss=config.loss,
                                             learning_rate=config.learning_rate,
-                                            optimizer=config.optimizer)
+                                            optimizer=config.optimizer,
+                                            prelogits=prelogits)
     trainer.train()
 
diff --git a/bob/learn/tensorflow/test/__init__.py b/bob/learn/tensorflow/test/__init__.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/data/cnn_mnist/checkpoint b/bob/learn/tensorflow/test/data/cnn_mnist/checkpoint
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/data/cnn_mnist/model.ckp b/bob/learn/tensorflow/test/data/cnn_mnist/model.ckp
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/data/cnn_mnist/model.ckp.meta b/bob/learn/tensorflow/test/data/cnn_mnist/model.ckp.meta
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/data/cnn_mnist/model.ckp_sequence_net.pickle b/bob/learn/tensorflow/test/data/cnn_mnist/model.ckp_sequence_net.pickle
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/data/dummy_audio/attack_sentence01.wav b/bob/learn/tensorflow/test/data/dummy_audio/attack_sentence01.wav
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/data/dummy_audio/genuine_sentence01.wav b/bob/learn/tensorflow/test/data/dummy_audio/genuine_sentence01.wav
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/data/dummy_database/m301_01_p01_i0_0.hdf5 b/bob/learn/tensorflow/test/data/dummy_database/m301_01_p01_i0_0.hdf5
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/data/dummy_database/m301_01_p02_i0_0.hdf5 b/bob/learn/tensorflow/test/data/dummy_database/m301_01_p02_i0_0.hdf5
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/data/dummy_database/m304_01_p01_i0_0.hdf5 b/bob/learn/tensorflow/test/data/dummy_database/m304_01_p01_i0_0.hdf5
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/data/dummy_database/m304_02_f12_i0_0.hdf5 b/bob/learn/tensorflow/test/data/dummy_database/m304_02_f12_i0_0.hdf5
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/data/dummy_verify_config.py b/bob/learn/tensorflow/test/data/dummy_verify_config.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/data/train_scripts/siamese.py b/bob/learn/tensorflow/test/data/train_scripts/siamese.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/data/train_scripts/softmax.py b/bob/learn/tensorflow/test/data/train_scripts/softmax.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/data/train_scripts/triplet.py b/bob/learn/tensorflow/test/data/train_scripts/triplet.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/test_cnn.py b/bob/learn/tensorflow/test/test_cnn.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/test_cnn_other_losses.py b/bob/learn/tensorflow/test/test_cnn_other_losses.py
old mode 100644
new mode 100755
index 9519aea6..bc5f3ae7
--- a/bob/learn/tensorflow/test/test_cnn_other_losses.py
+++ b/bob/learn/tensorflow/test/test_cnn_other_losses.py
@@ -55,7 +55,7 @@ def scratch_network_embeding_example(train_data_shuffler, reuse=False, get_embed
     return logits, prelogits
 
 
-def test_cnn_tfrecord_embedding_validation():
+def test_center_loss_tfrecord_embedding_validation():
     tf.reset_default_graph()
 
     train_data, train_labels, validation_data, validation_labels = load_mnist()
@@ -128,31 +128,58 @@ def test_cnn_tfrecord_embedding_validation():
                                         )
 
     trainer.train()
-    
 
-    
-    os.remove(tfrecords_filename)
-    os.remove(tfrecords_filename_val)    
-    """
     assert True
     tf.reset_default_graph()
     del trainer
     assert len(tf.global_variables())==0
+
+    del train_data_shuffler
+    del validation_data_shuffler
+
+    ##### 2 Continuing the training
+    
+    # Creating the CNN using the TFRecord as input
+    train_data_shuffler  = TFRecord(filename_queue=filename_queue,
+                                    batch_size=batch_size)
+
+    validation_data_shuffler  = TFRecord(filename_queue=filename_queue_val,
+                                         batch_size=2000)
+    
+    # One graph trainer
+    trainer = Trainer(train_data_shuffler,
+                      validation_data_shuffler=validation_data_shuffler,
+                      validate_with_embeddings=True,
+                      iterations=2, #It is supper fast
+                      analizer=None,
+                      temp_dir=directory)
+
+    trainer.create_network_from_file(directory)
+    
+    import ipdb; ipdb.set_trace();
+
+    trainer.train()
+    
+    """
     
     # Inference. TODO: Wrap this in a package
     file_name = os.path.join(directory, "model.ckp.meta")
     images = tf.placeholder(tf.float32, shape=(None, 28, 28, 1))
-    graph = scratch_network_embeding_example(images, reuse=False)
+    graph ,_ = scratch_network_embeding_example(images, reuse=False)
 
     session = tf.Session()
     session.run(tf.global_variables_initializer())
     saver = tf.train.import_meta_graph(file_name, clear_devices=True)
     saver.restore(session, tf.train.latest_checkpoint(os.path.dirname("./temp/cnn_scratch/")))
     data = numpy.random.rand(2, 28, 28, 1).astype("float32")
+    assert session.run(graph, feed_dict={images: data}).shape == (2, 10)
+    """
 
-    assert session.run(graph['logits'], feed_dict={images: data}).shape == (2, 10)
+    os.remove(tfrecords_filename)
+    os.remove(tfrecords_filename_val)    
 
     tf.reset_default_graph()
     shutil.rmtree(directory)
     assert len(tf.global_variables())==0
-    """
+
+
diff --git a/bob/learn/tensorflow/test/test_cnn_prefetch.py b/bob/learn/tensorflow/test/test_cnn_prefetch.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/test_cnn_pretrained_model.py b/bob/learn/tensorflow/test/test_cnn_pretrained_model.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/test_cnn_scratch.py b/bob/learn/tensorflow/test/test_cnn_scratch.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/test_cnn_trainable_variables_select.py b/bob/learn/tensorflow/test/test_cnn_trainable_variables_select.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/test_datashuffler.py b/bob/learn/tensorflow/test/test_datashuffler.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/test_datashuffler_augmentation.py b/bob/learn/tensorflow/test/test_datashuffler_augmentation.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/test_db_to_tfrecords.py b/bob/learn/tensorflow/test/test_db_to_tfrecords.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/test_dnn.py b/bob/learn/tensorflow/test/test_dnn.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/test_inception.py b/bob/learn/tensorflow/test/test_inception.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/test_layers.py b/bob/learn/tensorflow/test/test_layers.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/test_train_script.py b/bob/learn/tensorflow/test/test_train_script.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/test/test_utils.py b/bob/learn/tensorflow/test/test_utils.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/trainers/SiameseTrainer.py b/bob/learn/tensorflow/trainers/SiameseTrainer.py
old mode 100644
new mode 100755
index 300b8a06..cde9bb5a
--- a/bob/learn/tensorflow/trainers/SiameseTrainer.py
+++ b/bob/learn/tensorflow/trainers/SiameseTrainer.py
@@ -220,6 +220,7 @@ class SiameseTrainer(Trainer):
 
     def fit(self, step):
         feed_dict = self.get_feed_dict(self.train_data_shuffler)
+                
         _, l, bt_class, wt_class, lr, summary = self.session.run([
                                                 self.optimizer,
                                                 self.predictor['loss'], self.predictor['between_class'],
@@ -231,6 +232,11 @@ class SiameseTrainer(Trainer):
 
     def create_general_summary(self):
 
+        # Appending histograms for each trainable variables
+        #for var in tf.trainable_variables():
+        for var in tf.global_variables():
+            tf.summary.histogram(var.op.name, var)
+
         # Train summary
         tf.summary.scalar('loss', self.predictor['loss'])
         tf.summary.scalar('between_class_loss', self.predictor['between_class'])
diff --git a/bob/learn/tensorflow/trainers/Trainer.py b/bob/learn/tensorflow/trainers/Trainer.py
old mode 100644
new mode 100755
index 8b7ebc2e..03ac1670
--- a/bob/learn/tensorflow/trainers/Trainer.py
+++ b/bob/learn/tensorflow/trainers/Trainer.py
@@ -84,6 +84,7 @@ class Trainer(object):
         self.summaries_train = None
         self.train_summary_writter = None
         self.thread_pool = None
+        self.centers = None
 
         # Validation data
         self.validation_summary_writter = None
@@ -98,6 +99,7 @@ class Trainer(object):
 
         self.graph = None
         self.validation_graph = None
+        self.prelogits = None
                 
         self.loss = None
         
@@ -240,8 +242,10 @@ class Trainer(object):
         # TODO: SPECIFIC HACK FOR THE CENTER LOSS. I NEED TO FIND A CLEAN SOLUTION FOR THAT
         self.centers = None
         if prelogits is not None:
-            tf.add_to_collection("prelogits", prelogits)
             self.predictor, self.centers = self.loss(self.graph, prelogits, self.label_ph)
+            tf.add_to_collection("centers", self.centers)
+            tf.add_to_collection("prelogits", prelogits)
+            self.prelogits = prelogits
         else:
             self.predictor = self.loss(self.graph, self.label_ph)
         
@@ -275,10 +279,6 @@ class Trainer(object):
 
         tf.add_to_collection("summaries_train", self.summaries_train)
 
-        # Appending histograms for each trainable variables
-        for var in tf.trainable_variables():
-            tf.summary.histogram(var.op.name, var)
-
         # Same business with the validation
         if self.validation_data_shuffler is not None:
             self.validation_data_ph = self.validation_data_shuffler("data", from_queue=True)
@@ -371,6 +371,10 @@ class Trainer(object):
         self.summaries_train = tf.get_collection("summaries_train")[0]        
         self.global_step = tf.get_collection("global_step")[0]
         self.from_scratch = False
+
+        if len(tf.get_collection("centers")) > 0:
+            self.centers = tf.get_collection("centers")[0]
+            self.prelogits = tf.get_collection("prelogits")[0]
         
         # Loading the validation bits
         if self.validation_data_shuffler is not None:
@@ -378,7 +382,7 @@ class Trainer(object):
 
             self.validation_graph = tf.get_collection("validation_graph")[0]
             self.validation_data_ph = tf.get_collection("validation_data_ph")[0]
-            self.validation_label = tf.get_collection("validation_label_ph")[0]
+            self.validation_label_ph = tf.get_collection("validation_label_ph")[0]
 
             self.validation_predictor = tf.get_collection("validation_predictor")[0]
             self.summaries_validation = tf.get_collection("summaries_validation")[0]
@@ -480,6 +484,12 @@ class Trainer(object):
         """
         Creates a simple tensorboard summary with the value of the loss and learning rate
         """
+
+        # Appending histograms for each trainable variables
+        #for var in tf.trainable_variables():
+        for var in tf.global_variables():
+            tf.summary.histogram(var.op.name, var)
+        
         # Train summary
         tf.summary.scalar('loss', average_loss)
         tf.summary.scalar('lr', self.learning_rate)        
diff --git a/bob/learn/tensorflow/trainers/TripletTrainer.py b/bob/learn/tensorflow/trainers/TripletTrainer.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/trainers/__init__.py b/bob/learn/tensorflow/trainers/__init__.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/trainers/learning_rate.py b/bob/learn/tensorflow/trainers/learning_rate.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/utils/__init__.py b/bob/learn/tensorflow/utils/__init__.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/utils/session.py b/bob/learn/tensorflow/utils/session.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/utils/singleton.py b/bob/learn/tensorflow/utils/singleton.py
old mode 100644
new mode 100755
diff --git a/bob/learn/tensorflow/utils/util.py b/bob/learn/tensorflow/utils/util.py
old mode 100644
new mode 100755
diff --git a/bootstrap-buildout.py b/bootstrap-buildout.py
old mode 100644
new mode 100755
diff --git a/buildout.cfg b/buildout.cfg
old mode 100644
new mode 100755
diff --git a/develop.cfg b/develop.cfg
old mode 100644
new mode 100755
diff --git a/doc/conf.py b/doc/conf.py
old mode 100644
new mode 100755
diff --git a/doc/extra-intersphinx.txt b/doc/extra-intersphinx.txt
old mode 100644
new mode 100755
diff --git a/doc/img/favicon.ico b/doc/img/favicon.ico
old mode 100644
new mode 100755
diff --git a/doc/img/logo.png b/doc/img/logo.png
old mode 100644
new mode 100755
diff --git a/doc/index.rst b/doc/index.rst
old mode 100644
new mode 100755
diff --git a/doc/nitpick-exceptions.txt b/doc/nitpick-exceptions.txt
old mode 100644
new mode 100755
diff --git a/doc/py_api.rst b/doc/py_api.rst
old mode 100644
new mode 100755
diff --git a/doc/references.rst b/doc/references.rst
old mode 100644
new mode 100755
diff --git a/doc/user_guide.rst b/doc/user_guide.rst
old mode 100644
new mode 100755
diff --git a/requirements.txt b/requirements.txt
old mode 100644
new mode 100755
diff --git a/setup.py b/setup.py
old mode 100644
new mode 100755
diff --git a/version.txt b/version.txt
old mode 100644
new mode 100755
-- 
GitLab