我使用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
?你知道其他可能的解決上述問題的方法嗎?