torch.utils.data.Dataset
および をtorch.utils.data.DataLoader
独自のデータ( だけでなくtorchvision.datasets
)で活用するにはどうすればよいでしょうか?
DataLoaders
組み込み関数を任意のデータセットで使用する方法はありますかTorchVisionDatasets
?
ベストアンサー1
はい、可能です。オブジェクトを自分で作成するだけです。例:
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
、 とはテンソルtargets
です。features
は 2 次元、つまり各行が 1 つのトレーニング サンプルを表す行列である必要があります。また、targets
スカラーを予測しようとしているのか、ベクトルを予測しようとしているのかに応じて、1 次元または 2 次元になります。
編集: @sarthak の質問への回答
基本的にはそうです。 型のオブジェクトを作成するとTensorData
、コンストラクターは、特徴テンソル (実際には と呼ばれますdata_tensor
) とターゲット テンソル ( と呼ばれますtarget_tensor
) の最初の次元の長さが同じかどうかを調査します。
assert data_tensor.size(0) == target_tensor.size(0)
ただし、これらのデータを後でニューラル ネットワークに入力する場合は、注意が必要です。畳み込みレイヤーはこのようなデータに対して機能しますが、(私の考えでは) 他のすべてのタイプのレイヤーでは、データが行列形式で提供されることが想定されています。したがって、このような問題に遭遇した場合、簡単な解決策は、FloatTensor
メソッドを使用して 4D データセット (何らかのテンソルとして指定、例: ) を行列に変換することですview
。5000xnxnx3 データセットの場合、次のようになります。
2d_dataset = 4d_dataset.view(5000, -1)
(この値は、-1
PyTorch に 2 番目の次元の長さを自動的に計算するように指示します。)