2017-04-03 27 views
0

我使用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?你知道其他可能的解决上述问题的方法吗?

回答