2017-02-11 6 views
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?

+1

Wenn dies auf einer GPU passiert, gibt es einen Vorteil, 'embedding_lookup' über' gather' zu verwenden? –

+0

Das ist ein guter Punkt. Ich habe es gerade auch selbst versucht. Es scheint keinen Vorteil zu geben. Problem gelöst! –

+0

@WesleyTansey Ich habe ein ähnliches Problem. Also haben Sie Ihr Problem gelöst, indem Sie embedding_lookup durch gather ersetzen? habe ich recht? – superMind

Antwort

0

Wenn Sie

tf.Session(config=tf.ConfigProto(allow_soft_placement=False)) 

verwenden, sollten Sie einen Fehler. Das liegt daran, dass embedding_lookup derzeit nicht auf der GPU implementiert ist.

Verwandte Themen