私はTensorFlowとPythonを使って単純な競合ニューラルネットワークを実装しています。tf.int64変数を持つGPU用のカーネルがありません
実行中のエポック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
に保存します。私は、以前のコードを実行した場合
私が取得エラー:明示的なデバイスの仕様を満たすことができませんでした「/デバイス::GPU:0」
は、「変数2」ノードへのデバイスに割り当てることができないためにGPUデバイスのためのサポートされているカーネルません利用可能です。
私は完全なスタックトレースを提供できますが、ここでは必要ないと思います。
質問:私はtf.float64
変数を使用し、/を使用するたびに/からtf.int64
に値をキャストしますか?上記の問題を解決する他の方法をご存じですか?