Tüm TFDS veri kümeleri, katalogda incelenebilecek çeşitli veri bölümlerini (örneğin 'train'
, 'test'
) açığa çıkarır. all
dışında herhangi bir alfabetik dize, bölünmüş ad olarak kullanılabilir (bu, tüm bölmelerin birleşimine karşılık gelen ayrılmış bir terimdir, aşağıya bakın).
"Resmi" veri kümesi bölmelerine ek olarak TFDS, bölme dilimlerinin ve çeşitli kombinasyonların seçilmesine olanak tanır.
Dilimleme API'si
Dilimleme talimatları tfds.load
veya tfds.DatasetBuilder.as_dataset
dosyasında split=
kwarg aracılığıyla belirtilir.
ds = tfds.load('my_dataset', split='train[:75%]')
builder = tfds.builder('my_dataset')
ds = builder.as_dataset(split='test+train[:75%]')
Bölme şunlar olabilir:
- Düz bölme adları (
'train'
,'test'
, ... gibi bir dize): Seçilen bölme içindeki tüm örnekler. - Dilimler : Dilimler, python dilim gösterimiyle aynı anlama sahiptir. Dilimler şunlar olabilir:
- Mutlak (
'train[123:450]'
,train[:4000]
): (okuma sırası ile ilgili uyarı için aşağıdaki nota bakın) - Yüzde (
'train[:75%]'
,'train[25%:75%]'
): Tüm verileri eşit dilimlere bölün. Veriler eşit olarak bölünemiyorsa yüzdelerin bir kısmı ek örnekler içerebilir. Kesirli yüzde desteklenir. - Parça (
train[:4shard]
,train[4shard]
): İstenen parçadaki tüm örnekleri seçin. (bölünmenin parça sayısını almak içininfo.splits['train'].num_shards
bakın)
- Mutlak (
- Bölmelerin birleşimi (
'train+test'
,'train[:25%]+test'
): Bölmeler birlikte serpiştirilecektir. - Tam veri kümesi (
'all'
):'all'
tüm bölmelerin birleşimine karşılık gelen özel bir bölme adıdır ('train+test+...'
ile eşdeğerdir). - Bölme listesi (
['train', 'test']
): Birden fazlatf.data.Dataset
ayrı ayrı döndürülür:
# Returns both train and test split separately
train_ds, test_ds = tfds.load('mnist', split=['train', 'test[:50%]'])
tfds.even_splits
ve çoklu ana bilgisayar eğitimi
tfds.even_splits
aynı boyuttaki örtüşmeyen alt bölümlerin bir listesini oluşturur.
# Divide the dataset into 3 even parts, each containing 1/3 of the data
split0, split1, split2 = tfds.even_splits('train', n=3)
ds = tfds.load('my_dataset', split=split2)
Bu, her ana bilgisayarın orijinal veriden bir dilim alması gereken dağıtılmış bir ortamda eğitim yaparken özellikle yararlı olabilir.
Jax
bu, tfds.split_for_jax_process
kullanılarak daha da basitleştirilebilir:
split = tfds.split_for_jax_process('train', drop_remainder=True)
ds = tfds.load('my_dataset', split=split)
tfds.split_for_jax_process
aşağıdakiler için basit bir takma addır:
# The current `process_index` loads only `1 / process_count` of the data.
splits = tfds.even_splits('train', n=jax.process_count(), drop_remainder=True)
split = splits[jax.process_index()]
tfds.even_splits
, tfds.split_for_jax_process
herhangi bir bölme değerini girdi olarak kabul eder (örn. 'train[75%:]+test'
)
Dilimleme ve meta veriler
Veri kümesi bilgisini kullanarak bölmeler/alt bölümler ( num_examples
, file_instructions
,...) hakkında ek bilgi almak mümkündür:
builder = tfds.builder('my_dataset')
builder.info.splits['train'].num_examples # 10_000
builder.info.splits['train[:75%]'].num_examples # 7_500 (also works with slices)
builder.info.splits.keys() # ['train', 'test']
Çapraz doğrulama
Dize API'sini kullanan 10 katlı çapraz doğrulama örnekleri:
vals_ds = tfds.load('mnist', split=[
f'train[{k}%:{k+10}%]' for k in range(0, 100, 10)
])
trains_ds = tfds.load('mnist', split=[
f'train[:{k}%]+train[{k+10}%:]' for k in range(0, 100, 10)
])
Doğrulama veri kümelerinin her biri %10 olacaktır: [0%:10%]
, [10%:20%]
, ..., [90%:100%]
. Ve eğitim veri kümelerinin her biri tamamlayıcı %90 olacaktır: [10%:100%]
(karşılık gelen [0%:10%]
doğrulama kümesi için), `[0%:10%]
- [20%:100%]
(for a validation set of
),...
tfds.core.ReadInstruction
ve yuvarlama
str
yerine bölmeleri tfds.core.ReadInstruction
olarak iletmek mümkündür:
Örneğin, split = 'train[50%:75%] + test'
şuna eşdeğerdir:
split = (
tfds.core.ReadInstruction(
'train',
from_=50,
to=75,
unit='%',
)
+ tfds.core.ReadInstruction('test')
)
ds = tfds.load('my_dataset', split=split)
unit
şunlar olabilir:
-
abs
: Mutlak dilimleme -
%
: Yüzde dilimleme -
shard
: Parça dilimleme
tfds.ReadInstruction
ayrıca bir yuvarlama argümanı vardır. Veri kümesindeki örnek sayısı eşit olarak bölünmüyorsa:
-
rounding='closest'
(varsayılan): Kalan örnekler yüzdeler arasında dağıtılmıştır, dolayısıyla yüzdelerin bir kısmı ek örnekler içerebilir. -
rounding='pct1_dropremainder'
: Kalan örnekler çıkarıldı, ancak bu, tüm yüzdelerin tam olarak aynı sayıda örnek içerdiğini garanti eder (örneğin:len(5%) == 5 * len(1%)
).
Tekrarlanabilirlik ve determinizm
Oluşturma sırasında, belirli bir veri kümesi sürümü için TFDS, örneklerin diskte deterministik olarak karıştırıldığını garanti eder. Dolayısıyla veri kümesinin iki kez (2 farklı bilgisayarda) oluşturulması örnek sırasını değiştirmeyecektir.
Benzer şekilde, alt bölme API'si platform, mimari vb. ne olursa olsun her zaman aynı örnek set
seçecektir. Bu set('train[:20%]') == set('train[:10%]') + set('train[10%:20%]')
anlamına gelir set('train[:20%]') == set('train[:10%]') + set('train[10%:20%]')
.
Ancak örneklerin okunma sırası belirleyici olmayabilir . Bu, diğer parametrelere bağlıdır (örn. shuffle_files=True
olup olmadığına).