Keras与Tensorflow后端-使用CPU运行预测但使用GPU进行拟合

5
我正在使用keras-rl库中的D-DQN算法来训练我的神经网络。我使用model.fit_generator()函数在GPU上运行训练,以允许数据在进行反向传播时被发送到GPU。我怀疑数据的生成速度比GPU处理数据的速度慢。
在数据生成过程中,根据D-DQN算法的指导,我必须首先使用模型预测Q值,然后使用这些值进行反向传播。如果GPU用于运行这些预测,则意味着它们会打断数据流程(我希望反向传播尽可能频繁地运行)。
是否有一种方法可以指定在哪个设备上运行特定操作?以一种方式,我可以在CPU上运行预测,在GPU上运行反向传播。
2个回答

8

也许你可以在训练结束时保存模型。然后开始另一个Python文件,在导入任何Keras或TensorFlow的库之前,写入os.environ["CUDA_VISIBLE_DEVICES"]="-1"。现在你应该能够加载模型并使用CPU进行预测。


1
预测是训练的一部分,我想同时使用CPU和GPU。 - Raphael Royer-Rivard

3

没有看到你的代码,很难给出恰当的答案。

以下代码演示了如何列出可用设备并强制tensorflow使用特定设备。

def get_available_devices():
    local_device_protos = device_lib.list_local_devices()
    return [x.name for x in local_device_protos]

get_available_devices()

with tf.device('/gpu:0'):
    //Do GPU stuff here
with tf.device('/cpu:0'):
    //Do CPU stuff here

我已经尝试在执行model.predict_on_batch()之前使用with tf.device('/cpu:0'),并在model.fit_generator()之前使用with tf.device('/gpu:0'),但没有任何作用。创建模型时也需要使用吗?我还尝试将tf用作keras.backend.tensorflow_backend,但是那个tensorflow没有device()方法。 - Raphael Royer-Rivard
“did nothing” 是什么意思?你的意思是它仍然使用了 GPU,而不管你设置的设备是什么? - VegardKT
是的,它与我不使用这些命令时没有任何区别,即在预测和拟合过程中都使用 GPU。 - Raphael Royer-Rivard
据我从TensorFlow文档中所看到的,这应该是实现它的方法。为了保险起见,您可能还想在编译模型时指定设备。引用文档:“# # 在此上下文中构建的所有操作都将放置在GPU 0上”,不过“构建”是有点难以确定其含义的。[链接:设备](https://www.tensorflow.org/api_docs/python/tf/Graph#device) - VegardKT
不确定发生了什么问题,可能需要查看您的代码才能继续提供帮助。据我所知,这是完成它的方法。 - VegardKT
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接