我使用TensorFlow和Python实现一个简单的有竞争力的神经网络。缺少内核GPU与tf.int64可变
运行时代k
,我需要存储获胜者节点的索引并将其用于时代k+1
。我有一个变量类型的问题,其解决方案让我感到困惑。
其实,我理解主要的问题,因为我已阅读答案this question,但我想我需要在一些地方保存在GPU上该值。
我编写了一个简单的例子,用于显示我所讲的:
import tensorflow as tf
import numpy as np
with tf.device("gpu:0"):
sess = tf.InteractiveSession()
vec = tf.Variable(tf.random_uniform([3], 0.0, 1.0, dtype=tf.float64), dtype=tf.float64, name='random_vector')
var1 = tf.arg_max(vec, 0)
var2 = tf.Variable(0, dtype=tf.int64, name='variable2')
var2_op = tf.assign(var2, var1)
sess.run(var2_op)
比方说,在划时代k
年底,我有矢量vec
,我需要存储的索引具有最大值的位置,对应于var1
。在移至时代k+1
之前,我想将var1
的值存储在变量var2
中。
如果我运行上面的代码中,我得到错误:
无法分配设备节点“变量2”:无法满足明确的设备规格“/设备:GPU:0”,因为GPU的设备不支持的内核可用。
我可以提供完整的堆栈跟踪,但我认为这里不需要。
所以问题是:我是否被迫使用tf.float64
变量,并在每次使用时将值从/到tf.int64
?你知道其他可能的解决上述问题的方法吗?