Repository: accenture/ampligraph
Issue: Trained relation embeddings in TransE model different sizes

### Description
After training TransE embeddings on a E x R x E dataset. When accessing the `model.trained_model_params[1].shape` is not |R| x k, but much more relation embeddings than actual relations.

`model.rel_to_idx` contains the correct set of |R| relations.

Is this expected behavior, i.e. does `model.trained_model_params[1]` contain duplicated relation embeddings due to some optimizations for batch processing?

### Actual Behavior
`model.trained_model_params[1].shape` !=  |R| x k

### Expected Behavior
`model.trained_model_params[1].shape` ==  |R| x k

### Steps to Reproduce

```
triples = load_from_csv('./', 'edgetensor.csv', sep=',', header=0)
model = TransE(batches_count=128, seed=555, epochs=5, k=32, loss='pairwise', loss_params={'margin': 1},
                   verbose=True, optimizer='sgd', optimizer_params={'lr': 0.01})
model.fit(X_train)
model.trained_model_params[1].shape
```

Changed files:
ampligraph/latent_features/models/ComplEx.py, ampligraph/latent_features/models/ConvKB.py, ampligraph/latent_features/models/EmbeddingModel.py

diff --git a/ampligraph/latent_features/models/ComplEx.py b/ampligraph/latent_features/models/ComplEx.py
index 9ce547c..5222e90 100644
--- a/ampligraph/latent_features/models/ComplEx.py
+++ b/ampligraph/latent_features/models/ComplEx.py
@@ -193,7 +193,7 @@ class ComplEx(EmbeddingModel):
         else:
             self.ent_emb = tf.get_variable('ent_emb', shape=[self.batch_size * 2, self.internal_k],
                                            initializer=self.initializer.get_tf_initializer(), dtype=tf.float32)
-            self.rel_emb = tf.get_variable('rel_emb', shape=[self.batch_size * 2, self.internal_k],
+            self.rel_emb = tf.get_variable('rel_emb', shape=[len(self.rel_to_idx), self.internal_k],
                                            initializer=self.initializer.get_tf_initializer(), dtype=tf.float32)
 
     def _fn(self, e_s, e_p, e_o):
diff --git a/ampligraph/latent_features/models/ConvKB.py b/ampligraph/latent_features/models/ConvKB.py
index 087cbde..4a7d317 100644
--- a/ampligraph/latent_features/models/ConvKB.py
+++ b/ampligraph/latent_features/models/ConvKB.py
@@ -209,7 +209,7 @@ class ConvKB(EmbeddingModel):
             self.ent_emb = tf.get_variable('ent_emb', shape=[self.batch_size * 2, self.internal_k],
                                            initializer=self.initializer.get_tf_initializer(), dtype=tf.float32)
 
-            self.rel_emb = tf.get_variable('rel_emb', shape=[self.batch_size * 2, self.internal_k],
+            self.rel_emb = tf.get_variable('rel_emb', shape=[len(self.rel_to_idx), self.internal_k],
                                            initializer=self.initializer.get_tf_initializer(), dtype=tf.float32)
 
         num_filters = self.embedding_model_params['num_filters']
diff --git a/ampligraph/latent_features/models/EmbeddingModel.py b/ampligraph/latent_features/models/EmbeddingModel.py
index 95083c1..c71fa94 100644
--- a/ampligraph/latent_features/models/EmbeddingModel.py
+++ b/ampligraph/latent_features/models/EmbeddingModel.py
@@ -484,7 +484,7 @@ class EmbeddingModel(abc.ABC):
 
             self.ent_emb = tf.get_variable('ent_emb', shape=[self.batch_size * 2, self.internal_k],
                                            initializer=self.initializer.get_tf_initializer(), dtype=tf.float32)
-            self.rel_emb = tf.get_variable('rel_emb', shape=[self.batch_size * 2, self.internal_k],
+            self.rel_emb = tf.get_variable('rel_emb', shape=[len(self.rel_to_idx), self.internal_k],
                                            initializer=self.initializer.get_tf_initializer(), dtype=tf.float32)
 
     def _get_model_loss(self, dataset_iterator):