Tüm TFDS veri kümeleri, katalogda incelenebilecek çeşitli veri bölmelerini (örneğin 'train'
, 'test'
) ortaya çıkarır.
"Resmi" veri kümesi bölmelerine ek olarak, TFDS bölme(ler)in dilim(ler)ini ve çeşitli kombinasyonları seçmeye izin verir.
Dilimleme API'sı
Dilimleme talimatları, split=
kwarg aracılığıyla tfds.load
veya tfds.DatasetBuilder.as_dataset
içinde belirtilir.
ds = tfds.load('my_dataset', split='train[:75%]')
tutucu1 l10n-yerbuilder = tfds.builder('my_dataset')
ds = builder.as_dataset(split='test+train[:75%]')
Bölünmüş olabilir:
- Düz bölme (
'train'
,'test'
): Seçilen bölme içindeki tüm örnekler. - Dilimler : Dilimler, python dilim gösterimi ile aynı anlama sahiptir. Dilimler şunlar olabilir:
- Mutlak (
'train[123:450]'
,train[:4000]
): (okuma sırası hakkında uyarı için aşağıdaki nota bakın) - Yüzde (
'train[:75%]'
,'train[25%:75%]'
): Tüm verileri 100 eşit dilime bölün. Veriler 100'e bölünemiyorsa, bazı yüzdeler ek örnekler içerebilir. - Shard (
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
)
- 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 çoktf.data.Dataset
ayrı olarak 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ı boyutta ö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 bir ana bilgisayarın orijinal veriden bir dilim alması gereken dağıtılmış bir ortamda eğitim yaparken özellikle yararlı olabilir.
Jax
ile 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 diğer 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ölünmüş değeri girdi olarak kabul eder (örneğin '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
API dizesini 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: [0%:10%]
, [10%:20%]
, ..., [90%:100%]
olacaktır. 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
olabilir:
-
abs
: Mutlak dilimleme -
%
: Yüzde dilimleme -
shard
: Shard dilimleme
tfds.ReadInstruction
ayrıca bir yuvarlama argümanına sahiptir. Veri kümesindeki örnek sayısı 100
eşit olarak bölünmüyorsa:
-
rounding='closest'
(varsayılan): Kalan örnekler yüzdeye göre dağıtılır, bu nedenle bazı yüzdeler ek örnekler içerebilir. -
rounding='pct1_dropremainder'
: Kalan örnekler çıkarılır, ancak bu, tüm yüzdelerin tam olarak aynı sayıda örneği 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 disk üzerinde deterministik olarak karıştırılmasını garanti eder. Bu nedenle, veri kümesini iki kez (2 farklı bilgisayarda) oluşturmak, örnek sırayı değiştirmez.
Benzer şekilde, alt bölünmüş API, 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ı deterministik olmayabilir . Bu, diğer parametrelere bağlıdır (örneğin, shuffle_files=True
olup olmadığı).