Datasets documentation
Gunakan dengan NumPy
Gunakan dengan NumPy
Dokumen ini adalah pengantar singkat tentang penggunaan datasets dengan NumPy, dengan fokus khusus pada cara mendapatkan objek numpy.ndarray dari dataset kami, dan cara menggunakannya untuk melatih model berbasis NumPy seperti model scikit-learn.
Format dataset
Secara default, dataset mengembalikan objek Python biasa: bilangan bulat, bilangan desimal, string, daftar, dan sebagainya.
Untuk mendapatkan array NumPy, Anda dapat mengatur format dataset menjadi numpy:
>>> from datasets import Dataset
>>> data = [[1, 2], [3, 4]]
>>> ds = Dataset.from_dict({"data": data})
>>> ds = ds.with_format("numpy")
>>> ds[0]
{'data': array([1, 2])}
>>> ds[:2]
{'data': array([
[1, 2],
[3, 4]])}Objek Dataset adalah pembungkus dari tabel Arrow, yang memungkinkan pembacaan cepat dari array dalam dataset ke array NumPy.
Perhatikan bahwa prosedur yang persis sama berlaku untuk objek DatasetDict, sehingga
ketika format DatasetDict diatur ke numpy, semua Dataset di dalamnya
akan diformat sebagai numpy:
>>> from datasets import DatasetDict
>>> data = {"train": {"data": [[1, 2], [3, 4]]}, "test": {"data": [[5, 6], [7, 8]]}}
>>> dds = DatasetDict.from_dict(data)
>>> dds = dds.with_format("numpy")
>>> dds["train"][:2]
{'data': array([
[1, 2],
[3, 4]])}Array N-dimensi
Jika dataset Anda terdiri dari array N-dimensi, Anda akan melihat bahwa secara default mereka dianggap sebagai array yang sama jika bentuknya tetap:
>>> from datasets import Dataset
>>> data = [[[1, 2],[3, 4]], [[5, 6],[7, 8]]] # fixed shape
>>> ds = Dataset.from_dict({"data": data})
>>> ds = ds.with_format("numpy")
>>> ds[0]
{'data': array([[1, 2],
[3, 4]])}>>> from datasets import Dataset
>>> data = [[[1, 2],[3]], [[4, 5, 6],[7, 8]]] # varying shape
>>> ds = Dataset.from_dict({"data": data})
>>> ds = ds.with_format("numpy")
>>> ds[0]
{'data': array([array([1, 2]), array([3])], dtype=object)}Namun logika ini sering kali memerlukan perbandingan bentuk (shape) dan penyalinan data yang lambat.
Untuk menghindarinya, Anda harus secara eksplisit menggunakan tipe fitur Array dan menentukan bentuk tensor Anda:
>>> from datasets import Dataset, Features, Array2D
>>> data = [[[1, 2],[3, 4]],[[5, 6],[7, 8]]]
>>> features = Features({"data": Array2D(shape=(2, 2), dtype='int32')})
>>> ds = Dataset.from_dict({"data": data}, features=features)
>>> ds = ds.with_format("numpy")
>>> ds[0]
{'data': array([[1, 2],
[3, 4]])}
>>> ds[:2]
{'data': array([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]]])}Jenis fitur lainnya
Data ClassLabel dikonversi dengan benar menjadi array:
>>> from datasets import Dataset, Features, ClassLabel
>>> labels = [0, 0, 1]
>>> features = Features({"label": ClassLabel(names=["negative", "positive"])})
>>> ds = Dataset.from_dict({"label": labels}, features=features)
>>> ds = ds.with_format("numpy")
>>> ds[:3]
{'label': array([0, 0, 1])}Objek string dan biner tidak berubah, karena NumPy hanya mendukung angka.
Jenis fitur Image dan Audio juga didukung.
Untuk menggunakan tipe fitur Image, Anda perlu menginstal ekstra
visionsebagaipip install datasets[vision].
>>> from datasets import Dataset, Features, Image
>>> images = ["path/to/image.png"] * 10
>>> features = Features({"image": Image()})
>>> ds = Dataset.from_dict({"image": images}, features=features)
>>> ds = ds.with_format("numpy")
>>> ds[0]["image"].shape
(512, 512, 3)
>>> ds[0]
{'image': array([[[ 255, 255, 255],
[ 255, 255, 255],
...,
[ 255, 255, 255],
[ 255, 255, 255]]], dtype=uint8)}
>>> ds[:2]["image"].shape
(2, 512, 512, 3)
>>> ds[:2]
{'image': array([[[[ 255, 255, 255],
[ 255, 255, 255],
...,
[ 255, 255, 255],
[ 255, 255, 255]]]], dtype=uint8)}Untuk menggunakan tipe fitur Audio, Anda perlu menginstal ekstra
audiosebagaipip install datasets[audio].
>>> from datasets import Dataset, Features, Audio
>>> audio = ["path/to/audio.wav"] * 10
>>> features = Features({"audio": Audio()})
>>> ds = Dataset.from_dict({"audio": audio}, features=features)
>>> ds = ds.with_format("numpy")
>>> ds[0]["audio"]["array"]
array([-0.059021 , -0.03894043, -0.00735474, ..., 0.0133667 ,
0.01809692, 0.00268555], dtype=float32)
>>> ds[0]["audio"]["sampling_rate"]
array(44100, weak_type=True)Memuat data
NumPy tidak memiliki kemampuan pemuatan data bawaan, sehingga Anda perlu mematerialisasi array NumPy seperti X, y untuk digunakan di scikit-learn atau menggunakan pustaka seperti PyTorch untuk memuat data Anda menggunakan DataLoader.
Menggunakan with_format('numpy')
Cara termudah untuk mendapatkan array NumPy dari dataset adalah dengan menggunakan metode with_format('numpy'). Asumsikan
bahwa kita ingin melatih jaringan saraf pada dataset MNIST yang tersedia
di HuggingFace Hub di https://huggingface.co/datasets/mnist.
>>> from datasets import load_dataset
>>> ds = load_dataset("ylecun/mnist")
>>> ds = ds.with_format("numpy")
>>> ds["train"][0]
{'image': array([[ 0, 0, 0, ...],
[ 0, 0, 0, ...],
...,
[ 0, 0, 0, ...],
[ 0, 0, 0, ...]], dtype=uint8),
'label': array(5)}Setelah format diatur, kita dapat memberikan dataset ke model berbasis NumPy dalam bentuk batch menggunakan metode Dataset.iter():
>>> for epoch in range(epochs):
... for batch in ds["train"].iter(batch_size=32):
... x, y = batch["image"], batch["label"]
... ...