Это быстрое кодирование в TensorFlow быстро? Или недостатки по какой-либо причине?
Есть несколько вопросов переполнения стека о вычислении встраиваемых вложений с помощью TensorFlow, и вот приемлемое решение:
num_labels = 10
sparse_labels = tf.reshape(label_batch, [-1, 1])
derived_size = tf.shape(label_batch)[0]
indices = tf.reshape(tf.range(0, derived_size, 1), [-1, 1])
concated = tf.concat(1, [indices, sparse_labels])
outshape = tf.reshape(tf.concat(0, [derived_size, [num_labels]]), [-1])
labels = tf.sparse_to_dense(concated, outshape, 1.0, 0.0)
Это почти идентично коду в официальном руководстве:https://www.tensorflow.org/versions/0.6.0/tutorials/mnist/tf/index.html
Мне кажется, что так какtf.nn.embedding_lookup
существует, это, вероятно, более эффективно. Вот версия, которая использует это, и поддерживает входные данные произвольной формы:
def one_hot(inputs, num_classes):
with tf.device('/cpu:0'):
table = tf.constant(np.identity(num_classes, dtype=np.float32))
embeddings = tf.nn.embedding_lookup(table, inputs)
return embeddings
Ожидаете ли вы, что эта реализация будет быстрее? И есть ли недостатки по какой-либо другой причине?