Datasets documentation
NumPy ile kullanma
NumPy ile kullanma
Bu belge, datasets kütüphanesinin NumPy ile kullanımına hızlı bir giriş niteliğindedir; odak noktası, veri setlerimizden numpy.ndarray nesnelerini nasıl elde edeceğimiz ve bunları scikit-learn modelleri gibi NumPy tabanlı modelleri eğitmek için nasıl kullanacağımızdır.
Veri seti biçimi
Varsayılan olarak veri kümeleri, tamsayılar, ondalık sayılar, dizeler, listeler vb. gibi standart Python nesneleri döndürür.
Bunun yerine NumPy dizileri almak için veri setinin biçimini numpy olarak ayarlayabilirsiniz:
>>> 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]])}Bir Dataset nesnesi, bir Arrow tablosunun sarmalayıcısıdır ve veri setindeki dizilerden NumPy dizilerine hızlı okumalara olanak tanır.
Aynı prosedürün DatasetDict nesneleri için de geçerli olduğunu unutmayın; bu nedenle bir DatasetDict'in biçimi numpy olarak ayarlandığında, içindeki tüm Datasetler numpy olarak biçimlendirilir:
>>> 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]])}N boyutlu diziler
Veri setiniz N boyutlu dizilerden oluşuyorsa, şekil sabit olduğunda varsayılan olarak aynı dizi olarak ele alındıklarını göreceksiniz:
>>> 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)}Ancak bu mantık genellikle yavaş şekil karşılaştırmaları ve veri kopyalamaları gerektirir.
Bunu önlemek için Array özellik türünü açıkça kullanmalı ve tensörlerinizin şeklini belirtmelisiniz:
>>> 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]]])}Diğer özellik türleri
ClassLabel verileri düzgün şekilde dizilere dönüştürülür:
>>> 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])}NumPy yalnızca sayıları desteklediği için string ve ikili nesneler değiştirilmez.
Image ve Audio özellik türleri de desteklenir.
Image özellik türünü kullanmak için
visionek paketinipip install datasets[vision]olarak yüklemeniz gerekir.
>>> 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)}Audio özellik türünü kullanmak için
audioek paketinipip install datasets[audio]olarak yüklemeniz gerekir.
>>> 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)Veri yükleme
NumPy yerleşik veri yükleme özelliklerine sahip değildir, bu nedenle scikit-learn içinde kullanmak için X, y gibi NumPy dizilerini somutlaştırmalı veya verilerinizi DataLoader ile yüklemek için PyTorch gibi bir kütüphane kullanmalısınız.
with_format('numpy') ile kullanma
Bir veri setinden NumPy dizilerini almanın en kolay yolu with_format('numpy') yöntemini kullanmaktır. HuggingFace Hub'da https://huggingface.co/datasets/mnist adresinde bulunan MNIST veri seti üzerinde bir sinir ağı eğitmek istediğimizi varsayalım.
>>> 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)}Biçim ayarlandıktan sonra, Dataset.iter() yöntemini kullanarak NumPy tabanlı modeli, veri setini partiler halinde besleyebiliriz:
>>> for epoch in range(epochs):
... for batch in ds["train"].iter(batch_size=32):
... x, y = batch["image"], batch["label"]
... ...