EMNISTE dans PyTorch

Barbara Streisand
Barbara Streisandoriginal
2024-12-10 00:33:10868parcourir

Achetez-moi un café☕

*Mon message explique EMNIST.

EMNIST() peut utiliser l'ensemble de données EMNIST comme indiqué ci-dessous :

*Mémos :

  • Le 1er argument est root (Required-Type:str ou pathlib.Path). *Un chemin absolu ou relatif est possible.
  • Le 2ème argument est split(Required-Type:str). *"byclass", "bymerge", "balanced", "letters", "digits" ou "mnist" peuvent y être définis.
  • Il existe un argument de train (Optional-Default:False-Type:float) : *Mémos :
    • Pour split="byclass" et split="byclass", si c'est vrai, les données de train (697 932 images) sont utilisées tandis que si c'est faux, les données de test (116 323 images) sont utilisées.
    • Pour split="balanced", si c'est vrai, les données de train (112 800 images) sont utilisées tandis que si c'est faux, les données de test (188 00 images) sont utilisées.
    • Pour split="letters", si c'est True, les données de train (124 800 images) sont utilisées tandis que si c'est False, les données de test (20 800 images) sont utilisées.
    • Pour split="digits", si c'est vrai, les données de train (240 000 images) sont utilisées tandis que si c'est faux, les données de test (40 000 images) sont utilisées.
    • Pour split="mnist", si c'est vrai, les données de train (60 000 images) sont utilisées tandis que si c'est faux, les données de test (10 000 images) sont utilisées.
  • Il existe un argument de transformation (Optional-Default:None-Type:callable).
  • Il existe un argument target_transform (Optional-Default:None-Type:callable).
  • Il existe un argument de téléchargement (Optional-Default:False-Type:bool) : *Mémos :
    • Si c'est vrai, l'ensemble de données est téléchargé depuis Internet et extrait (décompressé) vers root.
    • Si c'est True et que l'ensemble de données est déjà téléchargé, il est extrait.
    • Si c'est vrai et que l'ensemble de données est déjà téléchargé et extrait, rien ne se passe.
    • Il devrait être faux si l'ensemble de données est déjà téléchargé et extrait car il est plus rapide.
    • Vous pouvez télécharger et extraire manuellement l'ensemble de données à partir d'ici, par exemple. data/EMNIST/raw/.
  • Il y a le bug selon lequel les images sont retournées et tournées de 90 degrés dans le sens inverse des aiguilles d'une montre par défaut, elles doivent donc être transformées.
from torchvision.datasets import EMNIST

train_data = EMNIST(
    root="data",
    split="byclass"
)

train_data = EMNIST(
    root="data",
    split="byclass",
    train=True,
    transform=None,
    target_transform=None,
    download=False
)

test_data = EMNIST(
    root="data",
    split="byclass",
    train=False
)

len(train_data), len(test_data)
# 697932 116323

train_data
# Dataset EMNIST
#     Number of datapoints: 697932
#     Root location: data
#     Split: Train

train_data.root
# 'data'

train_data.split
# 'byclass'

train_data.train
# True

print(train_data.transform)
# None

print(train_data.target_transform)
# None

train_data.download
# <bound method EMNIST.download of Dataset EMNIST
#     Number of datapoints: 697932
#     Root location: data
#     Split: Train>

train_data[0]
# (<PIL.Image.Image image mode=L size=28x28>, 35)

train_data[1]
# (<PIL.Image.Image image mode=L size=28x28>, 36)

train_data[2]
# (<PIL.Image.Image image mode=L size=28x28>, 6)

train_data[3]
# (<PIL.Image.Image image mode=L size=28x28>, 3)

train_data[4]
# (<PIL.Image.Image image mode=L size=28x28>, 22)

train_data.classes
# ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
#  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
#  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
#  'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
#  'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
from torchvision.datasets import EMNIST

train_data = EMNIST(
    root="data",
    split="byclass",
    train=True
)

test_data = EMNIST(
    root="data",
    split="byclass",
    train=False
)

import matplotlib.pyplot as plt

def show_images(data):
    plt.figure(figsize=(12, 2))
    col = 5
    for i, (image, label) in enumerate(data, 1):
        plt.subplot(1, col, i)
        plt.title(label)
        plt.imshow(image)
        if i == col:
            break
    plt.show()

show_images(data=train_data)
show_images(data=test_data)

EMNIST in PyTorch

from torchvision.datasets import EMNIST
from torchvision.transforms import v2

train_data = EMNIST(
    root="data",
    split="byclass",
    train=True,
    transform=v2.Compose([
        v2.RandomHorizontalFlip(p=1.0),
        v2.RandomRotation(degrees=(90, 90))
    ])
)

test_data = EMNIST(
    root="data",
    split="byclass",
    train=False,
    transform=v2.Compose([
        v2.RandomHorizontalFlip(p=1.0),
        v2.RandomRotation(degrees=(90, 90))
    ])
)

import matplotlib.pyplot as plt

def show_images(data):
    plt.figure(figsize=(12, 2))
    col = 5
    for i, (image, label) in enumerate(data, 1):
        plt.subplot(1, col, i)
        plt.title(label)
        plt.imshow(image)
        if i == col:
            break
    plt.show()

show_images(data=train_data)
show_images(data=test_data)

EMNIST in PyTorch

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn