Oui, c'est possible. Il suffit de créer les objets par vous-même, par ex.
import torch.utils.data as data_utils
train = data_utils.TensorDataset(features, targets)
train_loader = data_utils.DataLoader(train, batch_size=50, shuffle=True)
où features
et targets
sont des tenseurs. features
doit être 2-D, c'est-à-dire une matrice où chaque ligne représente un échantillon d'entraînement, et targets
peut être 1-D ou 2-D, selon que l'on cherche à prédire un scalaire ou un vecteur.
J'espère que cela vous aidera !
EDIT : réponse à la question de @sarthak
En gros, oui. Si vous créez un objet de type TensorData
alors le constructeur vérifie si les premières dimensions du tenseur de caractéristiques (qui est en fait appelé data_tensor
) et le tenseur cible (appelé target_tensor
) ont la même longueur :
assert data_tensor.size(0) == target_tensor.size(0)
Toutefois, si vous souhaitez introduire ces données dans un réseau neuronal par la suite, vous devez faire attention. Alors que les couches de convolution fonctionnent sur des données comme les vôtres, (je pense) que tous les autres types de couches attendent que les données soient fournies sous forme de matrice. Donc, si vous rencontrez un tel problème, une solution facile serait de convertir votre ensemble de données 4D (donné comme une sorte de tenseur, par exemple FloatTensor
) en une matrice en utilisant la méthode view
. Pour votre ensemble de données 5000xnxnx3, cela ressemblerait à ceci :
2d_dataset = 4d_dataset.view(5000, -1)
(La valeur -1
indique à PyTorch de calculer automatiquement la longueur de la deuxième dimension).