EMNIST in PyTorch

Barbara Streisand
Barbara StreisandOriginal
2024-12-10 00:33:10870Durchsuche

Kauf mir einen Kaffee☕

*Mein Beitrag erklärt EMNIST.

EMNIST() kann den EMNIST-Datensatz wie unten gezeigt verwenden:

*Memos:

  • Das 1. Argument ist root(Required-Type:str oder pathlib.Path). *Ein absoluter oder relativer Pfad ist möglich.
  • Das 2. Argument ist split(Required-Type:str). *Es können „byclass“, „bymerge“, „balanced“, „letters“, „digits“ oder „mnist“ eingestellt werden.
  • Es gibt ein Zugargument (Optional-Default:False-Type:float): *Memos:
    • Für split="byclass" und split="byclass" werden, wenn es „True“ ist, Trainingsdaten (697.932 Bilder) verwendet, während, wenn es „False“ ist, Testdaten (116.323 Bilder) verwendet werden.
    • Für split="balanced" werden, wenn es „True“ ist, Trainingsdaten (112.800 Bilder) verwendet, während, wenn es „False“ ist, Testdaten (188.00 Bilder) verwendet werden.
    • Wenn „split="letters“ wahr ist, werden Trainingsdaten (124.800 Bilder) verwendet, während bei „falsch" Testdaten (20.800 Bilder) verwendet werden.
    • Wenn „split="digits" „True“ ist, werden Trainingsdaten (240.000 Bilder) verwendet, während bei „False“ Testdaten (40.000 Bilder) verwendet werden.
    • Wenn „split="mnist" wahr ist, werden Trainingsdaten (60.000 Bilder) verwendet, während bei „falsch“ Testdaten (10.000 Bilder) verwendet werden.
  • Es gibt ein Transformationsargument (Optional-Default:None-Type:callable).
  • Es gibt das Argument target_transform (Optional-Default:None-Type:callable).
  • Es gibt ein Download-Argument (Optional-Default:False-Type:bool): *Memos:
    • Wenn es wahr ist, wird der Datensatz aus dem Internet heruntergeladen und in das Stammverzeichnis extrahiert (entpackt).
    • Wenn es „True“ ist und der Datensatz bereits heruntergeladen wurde, wird er extrahiert.
    • Wenn es „True“ ist und der Datensatz bereits heruntergeladen und extrahiert wurde, passiert nichts.
    • Es sollte „False“ sein, wenn der Datensatz bereits heruntergeladen und extrahiert wurde, da es schneller ist.
    • Sie können den Datensatz hier manuell herunterladen und extrahieren, um ihn z. data/EMNIST/raw/.
  • Es gibt den Fehler, dass die Bilder standardmäßig gespiegelt und um 90 Grad gegen den Uhrzeigersinn gedreht werden, sodass sie transformiert werden sollten.
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

Das obige ist der detaillierte Inhalt vonEMNIST in PyTorch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn