python torch pytorch

python - PyTorch: Cómo usar DataLoaders para conjuntos de datos personalizados



subplot python (2)

¿Cómo hacer uso de torch.utils.data.Dataset y torch.utils.data.DataLoader en sus propios datos (no solo torchvision.datasets )?

¿Hay alguna forma de usar los DataLoaders incorporados que usan en los conjuntos de datos TorchVisionDatasets para usar en cualquier conjunto de datos?


Puede hacer esto fácilmente extendiendo la clase data.Dataset . De acuerdo con la API , todo lo que tienes que hacer es implementar dos funciones: __getitem__ y __len__ .

Luego puede envolver el conjunto de datos con el DataLoader como se muestra en la API y en la respuesta de @pho7.

Creo que la clase ImageFolder es una referencia. Ver código here .


Sí, eso es posible. Solo crea los objetos por ti mismo, por ejemplo

import torch.utils.data as data_utils train = data_utils.TensorDataset(features, targets) train_loader = data_utils.DataLoader(train, batch_size=50, shuffle=True)

Donde las features y los targets son tensores. features deben ser 2-D, es decir, una matriz donde cada línea representa una muestra de entrenamiento, y los targets pueden ser 1-D o 2-D, dependiendo de si se trata de predecir un escalar o un vector.

¡Espero que ayude!

EDIT : respuesta a la pregunta de @sarthak

Básicamente sí. Si crea un objeto de tipo TensorData , el constructor investiga si las primeras dimensiones del tensor de característica (que en realidad se llama data_tensor ) y el tensor de destino (llamado tensor de target_tensor ) tienen la misma longitud:

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

Sin embargo, si desea alimentar estos datos en una red neuronal posteriormente, debe tener cuidado. Mientras que las capas de convolución funcionan con datos como el suyo, (creo) todos los otros tipos de capas esperan que los datos se den en forma de matriz. Entonces, si se encuentra con un problema como este, entonces una solución fácil sería convertir su conjunto de datos 4D (dado como algún tipo de tensor, por ejemplo, FloatTensor ) en una matriz usando la view método. Para su conjunto de datos 5000xnxnx3, esto se vería así:

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

(El valor -1 le dice a PyTorch que calcule automáticamente la longitud de la segunda dimensión).