Le dataloder de Pytorch

Le dataloder de Pytorch
DatalOader de Pytorch est une fonctionnalité utile qui maintient vos données organisées et simplifie votre pipeline d'apprentissage automatique. Il nous permet d'itérer les données, de gérer les lots et de mélanger les échantillons pour éviter un sur-ajustement. Nous allons passer par la mise en œuvre de DatalOader dans Pytorch dans cet article. Avant cela, nous passerons par les terminologies de base que nous utiliserons lors de la mise en œuvre du chargeur de données. Nous allons ensuite commencer par l'ensemble de données de mode MNIST regroupé avec Pytorch. Plus tard, nous utiliserons DatalOader avec notre ensemble de données personnalisé.

Qu'est-ce que Pytorch?

Pytorch est un cadre d'apprentissage en profondeur open source pour la construction d'architectures de réseau et d'autres techniques de haut niveau comme RNN, CNN et LSTM. Il est utilisé par les chercheurs, les entreprises et les communautés ML et IA.

Le groupe de recherche sur l'intelligence artificielle de Facebook est principalement responsable de son développement.

Qu'est-ce que le tenseur (approche basée sur les mathématiques)?

Exercez une force sur une surface et regardez comment elle déviée dans différentes directions. Vous pouvez vous attendre à ce qu'il se déplace dans le même sens que la force, mais cela ne se produit pas toujours; La raison en est que le matériau n'est pas uniforme dans toutes les directions; il peut avoir une certaine structure, comme un cristal ou des couches. Une force, qui est un vecteur, est votre point de départ. (Les directions X, Y et Z ont chacune trois composants.) Vous recevez un vecteur de déviation (mouvement en x, y et z). La force, cependant, est dans le sens inverse du mouvement! Prétendons que la réponse est proportionnée à la force, ce qui signifie doubler la force deux fois le mouvement. C'est ce qu'on appelle une «réaction linéaire."

Comment pouvez-vous mettre tout cela en termes mathématiques? Avec un tenseur, bien sûr. Considérez un tenseur comme un instrument mathématique qui prend un vecteur (comme la force) et renvoie un nouveau vecteur (le mouvement). Les tenseurs ne sont nécessaires que lorsque les deux vecteurs pointent dans des directions opposées.

Itérations, lots, EPOCS. Que sont-ils en termes de réseaux de neurones?

Le nombre d'itérations (indiqué par n Ici) est le nombre de fois qu'un lot d'instances de formation estime le gradient et met à jour les paramètres du réseau neuronal.

La taille du lot B fait référence au nombre d'instances de formation employées dans une seule itération. Ceci est généralement utilisé lorsque le nombre d'instances de formation est assez grande, et il est généralement efficace de diviser toutes les données en mini-lots. Chaque lot a la taille: 1< B < N.

Pour utiliser les données de formation complètes une fois, il faut n (N/ /B) itérations. C'est ce qu'est une époque. Donc (N/ /B) *E, où E Le nombre d'époches est-il le nombre total de fois que les paramètres sont modifiés.

Il existe trois types de descente de dégradé. Il y a un compromis entre eux car on peut donner une bonne précision mais est lent. D'un autre côté, on est plus rapide, mais il ne garantit pas une bonne précision:

N = b, une époque est égale à une itération en mode lot.

Mode mini-lots: 1 < B < N, with N/B iterations per epoch.

B = 1, une époque prend n itérations dans le modèle stochastique de la descente de gradient.

Implémentation de DatalOader sur Fashion MNIST Dataset

Chargement de l'ensemble de données de mode MNIST de Pytorch

Fashion-Mnist est un ensemble de données d'image qui comprend 60 000 formation et 10 000 instances de test. Chaque exemple comprend une image en niveaux de gris 28 x 28 avec une étiquette de l'une des dix catégories. Vous trouverez ci-dessous quelques paramètres que vous satisferons lors du chargement de l'ensemble de données.

racine: Ceci est le répertoire dans lequel l'ensemble de données est enregistré.

former: indique que les données formées ou testées doivent être chargées.

télécharger: Si les données ne sont pas disponibles chez Root, elles sont téléchargées via Internet.

transform et cible_transform: Ces paramètres spécifient les transformations de fonctionnalité et d'étiquette.

Importer une torche
de Torch.utils.DataImport DataSet
FromTorChVisionImport DataSetS
de TorchVision.transformsimporttotensor
importmatplotlib.pyplotasplt
Train = ensembles de données.Fashionmnist (
root = "data",
Train = vrai,
Download = True,
transform = totensor ()
)
test = ensembles de données.Fashionmnist (
root = "data",
Train = faux,
Download = True,
transform = totensor ()
)

Coutume Ensemble de données de vos fichiers

importos
Importer des pandas en tant que PD
de Torchvision.IO Importread_image
# Créer une classe pour un ensemble de données personnalisé
classCustomDataset (ensemble de données):
# Initialiser l'ensemble de données
Def__Init __ (self, annotations, img_dir, trans = aucun, cible_trans = aucun):
soi.Labels = PD.read_csv (annotations)
soi.img_dir = img_dir
soi.trans = trans
soi.Target_Trans = Target_Trans
# Fonction pour retourner la durée des données
def__len __ (soi):
retourlen (soi.Étiquettes)
# Fonction pour obtenir un échantillon à l'index donné
def__getItem __ (self, index):
chemin = os.chemin.rejoindre (soi-même.img_dir, soi.Étiquettes.Iloc [index, 0])
img = read_image (chemin)
étiquette = soi.Étiquettes.ILOC [INDEX, 1]
si-même.trans:
IMG = soi.trans (IMG)
si-même.Target_Trans:
étiquette = soi.Target_Trans (étiquette)
returnImg, étiquette

Dans le code ci-dessus, nous voyons trois méthodes importantes:

__init__: Cette fonction est appelée lorsque l'objet de jeu de données est créé. Les deux transformations, ainsi que le répertoire contenant les images et le fichier d'annotations, sont configurées.

__Len__: Cette fonction vous renvoie la longueur de l'ensemble de données ou le nombre d'échantillons dans l'ensemble de données.

__obtenir l'article__: Cette méthode nous donne l'échantillon présent à un index.

Formation avec DatalOader

Stocker les données dans les chargeurs de données. Les chargeurs de données sont itérables qui vous permet de passer les échantillons un à la fois au moment de la formation et même de mélanger les données après que tous les lots soient traités.

de la torche.utils.Importation de données DatalOader
Train_loader = DatalOader (Train, Batch_Size = 32, Shuffle = True)
test_loader = dataloader (test, batch_size = 32, shuffle = true)

Itérer le dataloader

# Afficher l'image et l'étiquette.
Train_Features, Train_Labels = Next (iter (Train_loader))
Imprimer (F "Les caractéristiques de la forme du lot actuel sont Train_Features.taille()")
Imprimer (F "La forme des étiquettes de la forme actuelle du lot est Train_labels.taille()")
IMG = Train_Features [0].presser()
Label = Train_labels [0]
PLT.imshow (img, cmap = "gris")
PLT.montrer()
print (f "Label: label")

Sortir

Caractéristiques La forme du lot actuel est la torche.Taille ([32, 1, 28, 28])

La forme des étiquettes de la forme actuelle du lot est la torche.Taille ([32])

Étiquette: 5

Chaque itération du code ci-dessus renvoie un lot de fonctionnalités de formation et d'étiquettes de formation pour chaque itération. Pour éviter un sur-ajustement, les données sont mélangées après que tous les lots ont été traités.

Implémentation de chargeur de données sur un ensemble de données personnalisé

# Importation des bibliothèques que nous utiliserons
Importer une torche
de Torch.utils.DataImport DataSet
de Torch.utils.dataImportDataloader
# Définition de la classe d'ensemble de données
CLASSDATASETS (ensemble de données):
# initialisation de l'ensemble de données ici
Def__init __ (Self):
nombres = liste (plage (0, 20, 1))
soi.données = nombres
# Obtenez la longueur de l'ensemble de données ici
def__len __ (soi):
retourlen (soi.données)
# Obtenez l'élément dans un index
def__getItem __ (self, index):
retour à.données [index]
# Créer un objet de classe DATA_SET
DataSet = DataSets ()
# Implémentation de chargeur de données sur l'ensemble de données et spécifiant les paramètres
DatalOader = DatalOader (DataSet, Batch_Size = 5, Shuffle = True)
fori, lot en énumération (dataloader):
imprimer (i, lot)

Sortir

0 Tensor ([0, 4, 9, 15, 14])
1 tenseur ([11, 16, 12, 3, 10])
2 tenseur ([6, 8, 2, 17, 1])
3 Tensor ([7, 18, 5, 13, 19])

Conclusion

Nous avons suivi la mise en œuvre de DatalOader de Pytorch pour gérer la formation de nos données. Nous réalisons maintenant avec quelle facilité nous pouvons gérer les lots, les mélanges, l'itération de nos ensembles de données à l'aide de DatalOader. Cela aide à une meilleure analyse de nos modèles et finalement les améliorer.