2017-11-13 16 views
0

私は、次のコード、を行うが、今pytorch、 DTYPE = torch.cuda.FloatTensorを使用する方法を知っているように思います。割り当てtorch.cuda.FloatTensor

import torch 
dtype = torch.cuda.FloatTensor 
def fit (position): 
    return position**2 
def main(): 
    pop = 30 
    xmax, xmin = 5, -5 
    x= (xmax-xmin)*torch.rand(pop, 1).type(dtype)+xmin 
    y = fit(x) 
    [miny, indexmin] = torch.min(y,0) 
    best = x[indexmin] 
    print(best) 

最後の部分、私は、インデックスとxの値として変数最善を定義します。

import numpy as np 
import random as rand 
xmax, xmin = 5, -5 
pop = 30 
x = (xmax-xmin)*rand.random(pop,1) 
y = x**2 
[minz, indexmin] = np.amin(y), np.argmin(y) 
best = x[indexmin] 

これはそれを行うには、私の試みがある:(numpyのを使用して)コードストレートのpythonがありますindexminと等しいですが動作しません。私はここで間違って何をしていますか?

次messengeが表示されます。

RuntimeError: expecting vector of indices at /opt/conda/conda-bld/pytorch_1501971235237/work/pytorch-0.1.12/torch/lib/THC/generic/THCTensorIndex.cu:405 
+0

Hey!エラーを再現できません。私は別のpytorchバージョン上にあり、それはうまく動作します。あなたは 'conda list | grep pytorch'ターミナルから? – cleros

+0

@clerosありがとう! **申し訳ありませんが、私は間違ったコードを掲載しました** 輸入トーチ DTYPE = torch.cuda.FloatTensor デフ(x)がフィット: 復帰X ** 2 DEFメイン(): ポップ= 30 XMAXを、xmin = 5、-5 x =(xmax-xmin)* torch.rand(pop、1).type(dtype)+ xmin y = fit(x) [miny、indexmin] = torch.min(y 、0) 最高= x [indexmin] print(最高) main() これは私にエラーを与えるコードです。 ** 2)** grep pytorchを実行すると、 'grep'が内部コマンドまたは外部コマンドとして認識されません。 操作可能なプログラムまたはバッチファイルです。 – Johnny

答えて

0

上記のコードはpytorch 0.2で正常に動作します。問題を特定できるようにコードを分析してみましょう。ここ

x= (xmax-xmin)*torch.rand(pop, 1).type(dtype)+xmin 
y = fit(x) 

xy形状30x1の2Dテンソルです。次の行に:

[miny, indexmin] = torch.min(y,0) 

返さテンソルminy形状30x1indexminの2Dテンソルサイズ1の1次元テンソルです。あなたが実行するときに、:

best = x[indexmin] 

xは形状30x1の2Dテンソルであるとindexminはサイズ1の1Dテンソルであるので、それは(たぶん)(旧pytorchバージョンで)エラーになります。このエラーを解決するには、あなたが簡単に行うことができます。

best = x.squeeze()[indexmin] # x.squeeze() returns a 1d tensor of size `30` 

に注意してください、形状30x1の2Dテンソルは、サイズ30の1Dテンソルと同じです。したがって、次のようにプログラムを変更することができます。

import torch 
dtype = torch.cuda.FloatTensor 
def main(): 
    pop, xmax, xmin = 30, 5, -5 
    x= (xmax-xmin)*torch.rand(pop).type(dtype)+xmin 
    y = torch.pow(x, 2) 
    minz, indexmin = y.min(0) 
    best = x[indexmin] 
    print(best) 

main() 
+0

ありがとう、私の友人!できます! – Johnny