2016-11-09 5 views
1

В настоящее время у меня есть onehot encoddings, для которых я хочу использовать вложения. Однако, когда я называюПоиск вложений в Tensorflow с использованием одноразовой кодировки

embed=tf.nn.embedding_lookup(embeddings, train_data) 
print(embed.get_shape()) 

embed data shape (11, 32, 729, 128)

Эта форма должна быть (11, 32, 128), но это дает мне неправильные размеры, потому что train_data является onehot закодирован.

train_data2=tf.matmul(train_data,tf.range(729)) 

дает мне ошибку:

ValueError: Shape must be rank 2 but is rank 3 

Помогите мне пожалуйста! Благодарю.

ответ

2

Небольшое исправление в вашем примере:

encoding_size = 4 
one_hot_batch = tf.constant([[0, 0, 0, 1], [0, 1, 0, 0], [1, 0, 0, 0]]) 
one_hot_indexes = tf.matmul(one_hot_batch, np.array([range(encoding_size)], 
    dtype=np.int32).T) 

with tf.Session() as session: 
    print one_hot_indexes.eval() 

Другой способ:

batch_size = 3 
one_hot_batch = tf.constant([[0, 0, 0, 1], [0, 1, 0, 0], [1, 0, 0, 0]]) 
one_hot_indexes = tf.where(tf.not_equal(one_hot_batch, 0)) 
one_hot_indexes = one_hot_indexes[:, 1] 
one_hot_indexes = tf.reshape(one_hot_indexes, [batch_size, 1]) 
with tf.Session() as session: 
    print one_hot_indexes.eval() 

Результат в обоих случаях:

[[3] 
[1] 
[0]] 
+0

пытается сверху один не уверен, если вы можете просто использовать нп внутри есть подобный. – Rik

 Смежные вопросы

  • Нет связанных вопросов^_^