2016-04-12 9 views
0

Ich versuche, das retrain.py Skript (hier verfügbar: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/image_retraining/retrain.py). Ich habe bemerkt, dass der Teil, der mit der Zeile 747 beginnt, auf der CPU ausgeführt wird, wenn der Standardwert GPU sein sollte. So habe ich die folgende Zeile hinzugefügt, um es zu zwingen, auf GPU zu arbeiten:Tensorflow Übertragung Lernprobleme auf GPU laufen

`with tf.device("/gpu:0"): 
    (train_step, cross_entropy, bottleneck_input, ground_truth_input, final_tensor) = add_final_training_ops(len(image_lists.keys()), 
             FLAGS.final_tensor_name, 
             bottleneck_tensor)` 

Es verursacht den folgenden Fehler:

'tensorflow.python.framework.errors.InvalidArgumentError: Cannot assign a device to node 'gradients/Mean_grad/Prod': Could not satisfy explicit device specification '/device:GPU:0' because no supported kernel for GPU devices is available 
    [[Node: gradients/Mean_grad/Prod = Prod[T=DT_INT32, keep_dims=false, _device="/device:GPU:0"](gradients/Mean_grad/Shape_2, gradients/Mean_grad/range_1)]] 
Caused by op u'gradients/Mean_grad/Prod', defined at: 
File "retrain_tensorboard_pickle_mean.py", line 921, in <module> 
tf.app.run() 
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/platform/app.py", line 30, in run 
sys.exit(main(sys.argv)) 
File "retrain_tensorboard_pickle_mean.py", line 839, in main 
(train_step, cross_entropy, bottleneck_input, ground_truth_input, label_ground_truth_input, final_tensor) = add_final_training_ops(len(image_lists.keys()), FLAGS.final_tensor_name, bottleneck_tensor) 
File "retrain_tensorboard_pickle_mean.py", line 686, in add_final_training_ops 
cross_entropy_mean) 
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/optimizer.py", line 190, in minimize 
colocate_gradients_with_ops=colocate_gradients_with_ops) 
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/optimizer.py", line 241, in compute_gradients 
colocate_gradients_with_ops=colocate_gradients_with_ops) 
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gradients.py", line 481, in gradients 
in_grads = _AsList(grad_fn(op, *out_grads)) 
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/math_grad.py", line 91, in _MeanGrad 
factor = (math_ops.reduce_prod(input_shape) // 
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/math_ops.py", line 810, in reduce_prod 
keep_dims, name=name) 
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_math_ops.py", line 1115, in _prod 
keep_dims=keep_dims, name=name) 
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/op_def_library.py", line 655, in apply_op 
op_def=op_def) 
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 2146, in create_op 
original_op=self._default_original_op, op_def=op_def) 
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1154, in __init__ 
self._traceback = _extract_stack() 

...which was originally created as op u'Mean', defined at: 
File "retrain_tensorboard_pickle_mean.py", line 921, in <module> 
tf.app.run() 
[elided 1 identical lines from previous traceback] 
File "retrain_tensorboard_pickle_mean.py", line 839, in main 
(train_step, cross_entropy, bottleneck_input, ground_truth_input, label_ground_truth_input, final_tensor) = add_final_training_ops(len(image_lists.keys()), FLAGS.final_tensor_name, bottleneck_tensor) 
File "retrain_tensorboard_pickle_mean.py", line 681, in add_final_training_ops 
cross_entropy_mean = tf.reduce_mean(cross_entropy) 
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/math_ops.py", line 783, in reduce_mean 
keep_dims, name=name) 
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_math_ops.py", line 973, in _mean 
keep_dims=keep_dims, name=name) 
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/op_def_library.py", line 655, in apply_op 
op_def=op_def) 
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 2146, in create_op 
original_op=self._default_original_op, op_def=op_def) 
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1154, in __init__ 
self._traceback = _extract_stack() 

ich gefunden habe here, dass es ein Problem sein könnte, die meine ist nicht implementiert auf der GPU, aber auf der anderen Seite gibt es eine commit auf github, die den Mittelwert auf der GPU zu beheben.

Vorheriger Teil, z.B. Engpässe erzeugen (Zeile 744) läuft perfekt auf GPU, ohne es sogar zu zwingen.

Ich wäre dankbar für jede Hilfe !!

Justyna

+0

GPU Implementierung Mittelwert wurde vor kurzem hinzugefügt fest, vielleicht sind Sie ältere Version verwenden? –

+0

Hmm, wir haben die Masterversion von gestern mit allen Commits bezüglich reduction_ops_mean. Also, es ist wirklich seltsam ... Sie sagen, es sollte keine Fehler mit der neuesten Version von Tensorflow liefern? Ich habe auch versucht, die Verwendung der Methode reduce_mean durch das Zählen von Mittel von Hand zu ersetzen, so dass man reduce_sum zählt und es durch die Anzahl der Elemente des Tensors teilt. Auf diese Weise gibt es keinen Fehler bei der Arbeit an der GPU, aber ich sehe immer noch 0% Nutzung der GPU. – gromajus

+0

Sorry, ich habe es versucht, und scheint wie MeanGrad/Prod wird nicht für mich auch auf GPU platziert, so –

Antwort

1

Dies wurde nun in b874e2c, schöner Fang

+0

propagieren In der Tat gibt es jetzt jetzt einen Fehler! Vielen Dank! – gromajus