4
Ich habe etwas Gleichwertiges zu einem spärlichen softmax:Tensorflow embedding_lookup Farbverläufe auf der CPU registrieren?
...
with tf.device('/gpu:0'):
indices = tf.placeholder(tf.int32, [None, dimsize])
self._W = weight_variable([self._num_nodes, input_layer_size])
self._b = bias_variable([self._num_nodes])
sampled_W = tf.transpose(tf.nn.embedding_lookup(self._W, indices), [0,2,1]) # [batchsize, inputlayersize, dim1size]
sampled_b = tf.nn.embedding_lookup(self._b, indices) # [batchsize, dim1size]
...
Allerdings, wenn ich die Platzierung Protokollierung aktivieren, sehe ich mehrere Instanzen der Gradienten auf der CPU platziert werden, zum Beispiel:
gradients/.../embedding_lookup_1_grad/Size: /job:localhost/replica:0/task:0/cpu:0
I tensorflow/core/common_runtime/simple_placer.cc:819] gradients/.../embedding_lookup_1_grad/Size: /job:localhost/replica:0/task:0/cpu:0
Dies geschieht egal, welchen Optimierer ich wähle. Fehle ich hier etwas?
Wenn dies auf einer GPU passiert, gibt es einen Vorteil, 'embedding_lookup' über' gather' zu verwenden? –
Das ist ein guter Punkt. Ich habe es gerade auch selbst versucht. Es scheint keinen Vorteil zu geben. Problem gelöst! –
@WesleyTansey Ich habe ein ähnliches Problem. Also haben Sie Ihr Problem gelöst, indem Sie embedding_lookup durch gather ersetzen? habe ich recht? – superMind