2017-01-29 12 views

答えて

21

はい、可能です。オブジェクトを自分で作成するだけです(例:

featurestargetsはテンソルある
import torch.utils.data as data_utils 

train = data_utils.TensorDataset(features, targets) 
train_loader = data_utils.DataLoader(train, batch_size=50, shuffle=True) 

featuresは、2-Dでなければならず、すなわち、各行が1つのトレーニングサンプルを表し、targetsは、スカラーかベクトルかを予測しようとしているかどうかに応じて、1-Dまたは2-Dでよい。

希望に役立ちます!


EDIT:@のsarthakの質問への応答

基本的にはい。あなたがタイプTensorDataのオブジェクトを作成する場合は、コンストラクタは(実際にdata_tensorと呼ばれる)機能テンソルの最初の寸法と(target_tensorと呼ばれる)の目標テンソルが同じ長さを持っているかどうかを調査:

assert data_tensor.size(0) == target_tensor.size(0) 

しかし、これらのデータを後でニューラルネットワークに供給したい場合は、注意が必要です。畳み込みレイヤーはあなたのようなデータに作用しますが(私は思う)、他のタイプのレイヤーはすべて、データがマトリックス形式で与えられることを期待しています。したがって、このような問題に遭遇した場合、簡単な解決策は、メソッドviewを使用して、4Dデータセット(ある種のテンソルとして与えられます、たとえばFloatTensor)を行列に変換することです。あなたの5000xnxnx3データセットの場合、これは次のようになります。

2d_dataset = 4d_dataset.view(5000, -1) 

(値-1が自動的に二次元の長さを把握するためにPyTorchを伝えます。)

+0

私は3Dの特徴を持っています:画像の2Dとカラーチャネルのための追加の次元。私は5000xnxnx3として機能を渡す場合、それはまだ動作しますか? 5000はデータポイントの数ですnxnx3は画像サイズ – Sarthak

+0

ですが、基本的にはyesですが、私の答えの編集を確認してください。 – pho7

+0

4dデータセットは、ビューステートメントの必要がない機能として渡すことができます。 – Sarthak

5

あなたは簡単に、これはdata.Datasetクラスを拡張することがないことができます。 APIによると、2つの機能:__getitem____len__を実装するだけです。

これで、APIと@ pho7の答えに示すように、DataLoaderでデータセットをラップすることができます。

ImageFolderクラスは参考になると思います。コードhereを参照してください。

関連する問題