2017-04-03 7 views
0

私は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に値をキャストしますか?上記の問題を解決する他の方法をご存じですか?

答えて

0

は現在の半分、フロート、ダブルがサポートされています。

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/variable_ops.cc#L89

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/framework/register_types.h#L171

は、この上tensorflowのgithubの問題を提出する価値があるかもしれません。コードはテンプレート化されているので、int64変数のサポートは簡単です。しかし、算術演算では、GPUのint64サポートはfloatとdoubleのそれほど完全ではありません。

関連する問題