这是我的代码的一部分。
with tf.Graph().as_default(), tf.device('/cpu:0'):
global_step = tf.get_variable(
'global_step',
[],
initializer = tf.constant_initializer(0),
writer = tf.summary.FileWriter(logs_path,graph=tf.get_default_graph())
with tf.device('/gpu:0'):
tf.summary.scalar('learning_rate', INITIAL_LEARNING_RATE)
summary_op = tf.summary.merge_all()
我跑的时候。我会得到以下错误:
InvalidArgumentError(参见上面的回溯):无法为操作分配设备' learning_rate':无法满足显式设备规范' / device:GPU:0'因为没有 支持GPU设备的内核可用。 [[Node:learning_rate = ScalarSummary [T = DT_FLOAT,_device =" / device:GPU:0"](learning_rate / tags,learning_rate / values)]]
如果我将这2个操作移动到tf.device(" / cpu:0")设备范围,它将起作用。
tf.summary.scalar('learning_rate', INITIAL_LEARNING_RATE)
summary_op = tf.summary.merge_all()
我谷歌吧。关于使用" allow_soft_placement = True"有许多建议。但我认为这个解决方案基本上是自动更改设备范围。所以我的问题是: 为什么这两个操作不能分配给gpu?是否有任何文件我可以查看哪些操作可以或不能分配给gpu? 任何建议都是受欢迎的。
答案 0 :(得分:1)
你的错误说明了一切:
无法满足显式设备规范'/ device:GPU:0',因为没有支持GPU设备的内核。
该操作(在您使用的tensorflow版本中)没有GPU实现,因此必须发送到CPU设备。
答案 1 :(得分:1)
您无法将摘要操作分配给GPU,因为它没有意义。
简而言之,GPU执行并行操作。摘要只不过是一个文件,每次在其上写入时都会追加新行。这是一个顺序操作,与GPU能够执行的操作没有任何共同之处。