首頁 >後端開發 >Python教學 >PyTorch 中的 EMNIST

PyTorch 中的 EMNIST

Barbara Streisand
Barbara Streisand原創
2024-12-10 00:33:10870瀏覽

請我喝杯咖啡☕

*我的貼文解釋了 EMNIST。

EMNIST()可以使用EMNIST資料集,如下所示:

*備忘錄:

  • 第一個參數是 root(必要類型:str 或 pathlib.Path)。 *絕對或相對路徑都是可能的。
  • 第二個參數是 split(Required-Type:str)。 *可以設定“byclass”、“bymerge”、“balanced”、“letters”、“digits”或“mnist”。
  • 有訓練參數(可選-預設:False-類型:float): *備註:
    • 對於 split="byclass" 和 split="byclass",如果為 True,則使用訓練資料(697,932 張影像),如果為 False,則使用測試資料(116,323 張影像)。
    • 對於 split="balanced",如果為 True,則使用訓練資料(112,800 張圖像),如果為 False,則使用測試資料(188,00 張圖像)。
    • 對於 split="letters",如果為 True,則使用訓練資料(124,800 張圖像),如果為 False,則使用測試資料(20,800 張圖像)。
    • 對於 split="digits",如果為 True,則使用訓練資料(240,000 張圖像),如果為 False,則使用測試資料(40,000 張圖像)。
    • 對於 split="mnist",如果為 True,則使用訓練資料(60,000 張圖像),如果為 False,則使用測試資料(10,000 張圖像)。
  • 有轉換參數(可選-預設:無-類型:可呼叫)。
  • 有 target_transform 參數(可選-預設:無-類型:可呼叫)。
  • 有下載參數(可選-預設:False-類型:bool): *備註:
    • 如果為 True,則從網路下載資料集並解壓縮(解壓縮)到根目錄。
    • 如果為 True 並且資料集已下載,則將其提取。
    • 如果為 True 並且資料集已下載並提取,則不會發生任何事情。
    • 如果資料集已經下載並提取,則應該為 False,因為它速度更快。
    • 您可以從此處手動下載並提取資料集,例如資料/EMNIST/raw/.
  • 存在影像預設翻轉並逆時針旋轉 90 度的錯誤,因此需要對其進行轉換。
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

以上是PyTorch 中的 EMNIST的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn