Тензорный поток: как объединить различные тусклые вложения в тензорный поток? - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь объединить различные вложения dim в тензорном потоке:

Итак, я хочу объединить три вложения:

  • First_embedding = 300 dim
  • Second_embedding = 50dim
  • Third_embedding = 6 dim

Теперь я хочу, чтобы конечный вектор был 356 dim shape:

concat( [ 300 dim , 50 dim , 6 dim ] ) ---> 356 dim 

Я могу легко сделать это с помощью np.column_stack:

first_embedding = np.random.randint(10,20,[10,300])
second_embedding = np.random.randint(10,20,[10,50])
third_embedding  = np.random.randint(10,20,[10,6])

concat = np.column_stack((first_embedding,second_embedding,third_embedding))

print(concat.shape)

вывод:

(10, 356)

Я не могу сделать то же самое в тензорном потоке, поэтому, если я создаю три встраивания в тензорном потоке:

import  tensorflow  as tf

tf.reset_default_graph()

sentences = tf.placeholder(tf.int32,
                           shape=[None,None]
                          )

sentences_sec = tf.placeholder(tf.int32,
                           shape=[None,None]
                          )

sentences_third = tf.placeholder(tf.int32,
                           shape=[None,None]
                          )

Word_embedding = tf.get_variable(name="Word_embedding", 
                                 shape=[24,300], 
                                 initializer=tf.constant_initializer(np.array(load_embedding_matrix_1)), 
                                 trainable=False
                                )


first_embedding_loopup= tf.nn.embedding_lookup(Word_embedding,sentences)



Word_embedding_second = tf.get_variable(name="Word_embedding_2", 
                                 shape=[24,50], 
                                 initializer=tf.constant_initializer(np.array(load_embedding_matrix_2)), 
                                 trainable=False
                                )


second_embedding_loopup= tf.nn.embedding_lookup(Word_embedding_second,sentences_sec)



word_sentences_third = tf.get_variable(name="Word_embedding_3", 
                                 shape=[24,6], 
                                 initializer=tf.constant_initializer(np.array(load_embedding_matrix_3)), 
                                 trainable=False
                                )


third_embedding_loopup = tf.nn.embedding_lookup(Word_embedding_third,sentences_third)

Я пытаюсь использовать tf.concat, но для этого все dim должны быть одинаковыми,

Я был бы очень признателен, если бы кто-нибудь любезно дал мне несколько советов о том, как я могу использовать diff dim и получить ту же форму, что и я.получать от np.column_stack?

Спасибо!

1 Ответ

0 голосов
/ 28 декабря 2018

Вам необходимо указать ось , чтобы правильно объединить ваши векторы слов.Вот пример:

import tensorflow as tf

tf.enable_eager_execution()

a = tf.get_variable(name='a', initializer=tf.zeros_initializer(), shape=(512, 24, 300))
b = tf.get_variable(name='b', initializer=tf.zeros_initializer(), shape=(512, 24, 50))
c = tf.get_variable(name='c', initializer=tf.zeros_initializer(), shape=(512, 24, 6))

print(tf.concat(values=[a, b, c], axis=-1).numpy().shape)
>>> (512, 24, 356)
...