Ist diese One-Hot-Codierung in TensorFlow schnell? Oder aus irgendeinem Grund fehlerhaft?

Es gibt einige Fragen zum Stapelüberlauf bei der Berechnung von One-Hot-Einbettungen mit TensorFlow. Hier ist die akzeptierte Lösung:

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)

Dies ist fast identisch mit dem Code in einem offiziellen Tutorial:https: //www.tensorflow.org/versions/0.6.0/tutorials/mnist/tf/index.htm

Für mich scheint es, dass seittf.nn.embedding_lookup existiert, es ist wahrscheinlich effizienter. In der folgenden Version wird dies verwendet und es werden beliebig geformte Eingaben unterstützt:

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

Erwarten Sie eine schnellere Implementierung? Und ist es aus irgendeinem anderen Grund fehlerhaft?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage