2017-11-03 3 views
2

にtorch.FloatTensorと比較する:エレガントな方法は、私はこのようなGPUの上に横たわる(一つだけのエントリで)2 torch.FloatTensorを比較してみGPU

(FloatTensor_A> FloatTensor_B)の場合:何かを

問題は、(FloatTensor_A > FloatTensor_B)ByteTensorを返します。 CPUにテンソルをロードせず、numpyまたは従来の浮動小数点数に戻すことなく、これら2つのスカラーFloatTensors間のブール比較を行う方法はありますか?

+1

'(t1> t2).float()' – blckbird

+0

は(t1> t2).float()[0]を使うとうまく動作します。ありがとうございます – Maximilian

+1

私はそれを受け入れるでしょう回答を投稿する場合 – Maximilian

答えて

1

PyTorchリターンByteTensorsにおける比較演算(docsを参照)。あなたの結果を浮動小数点データ型に変換するために、結果に.float()を呼び出すことができます。たとえば:

(t1 > t2).float() 

(t1 > t2)ByteTensorを返します。

操作への入力は、同じメモリ(CPUまたはGPUのいずれか)になければなりません。戻り値は同じメモリ上にあります。もちろん、テンソルは.cpu()または.cuda()を呼び出すことでそれぞれのメモリに移動できます。

1

はい、簡単で簡単です。

例:

In [24]: import os 

# select `GPU 0` for the whole session 
In [25]: os.environ['CUDA_VISIBLE_DEVICES'] = '0' 

# required `data type` (for GPU) 
In [26]: dtype = torch.cuda.FloatTensor 

# define `x` & `y` directly on GPU 
In [27]: x = torch.randn(100, 100).type(dtype) 
In [28]: y = torch.randn(100, 100).type(dtype) 

# stay on GPU with desired `dtype` 
In [31]: x.gt(y).type(dtype) 
Out[31]: 

    0  1  1 ...  0  0  0 
    1  0  0 ...  1  0  1 
    1  1  1 ...  0  0  0 
     ...   ⋱   ...  
    1  1  1 ...  0  0  0 
    0  1  1 ...  1  1  1 
    1  0  1 ...  1  0  1 
[torch.cuda.FloatTensor of size 100x100 (GPU 0)] 


# sanity check :) 
In [33]: x.gt(y).type(dtype).is_cuda 
Out[33]: True 
+0

私が必要とするのは、IF句内で簡単に比較できるブール値またはintを返す比較です – Maximilian

関連する問題