2016-04-12 2 views
0

Я пытаюсь запустить сценарий retrain.py (доступно здесь: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/image_retraining/retrain.py). Я заметил, что часть, начинающаяся с строки 747, выполняется на CPU, когда по умолчанию должен быть GPU. Таким образом, я добавил следующую строку, чтобы заставить его работать на GPU:Проблемы с переносом проблемы с тензорным потоком для работы на GPU

`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)` 

Это вызывает следующую ошибку:

'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() 

я нашел here, что это может быть проблемой, значит, не реализованный на GPU, но с другой стороны есть commit на github, который фиксирует среднее значение для графического процессора.

Предыдущая часть, например. (строка 744) отлично работает на графическом процессоре, даже не заставляя его работать.

Я был бы признателен за любую помощь!

Юстина

+0

Mean реализации GPU был добавлен в последнее время, может быть, вы используете старую версию? –

+0

Хм, у нас есть главная версия со вчерашнего дня со всеми коммитами относительно reduce_ops_mean. Итак, это действительно странно ... Значит, вы говорите, что он не должен содержать никаких ошибок в новейшей версии тензорного потока? Я также попытался заменить использование метода reduce_mean средним подсчетом, так что счетчик reduce_sum и деление его на количество элементов тензора. Таким образом, нет ошибки при принудительной работе с графическим процессором, но я все еще вижу 0% использования графического процессора. – gromajus

+0

Извините, я пробовал это и кажется, что MeanGrad/Prod не попадает на GPU для меня тоже, глядя –

ответ

1

Это теперь было зафиксировано в b874e2c, хороший улов

+0

Действительно, теперь есть ошибка! Спасибо! – gromajus

Смежные вопросы