tfds.features.FeatureConnector API'si:
- Nihai
tf.data.Datasetyapısını, şekillerini ve türlerini tanımlar. - Diske/diskten serileştirmeyi soyutlayın.
- Ek meta verileri açığa çıkarın (örn. etiket adları, ses örnekleme hızı,...)
Genel Bakış
tfds.features.FeatureConnector veri kümesi özellikleri yapısını tanımlar ( tfds.core.DatasetInfo içinde):
tfds.core.DatasetInfo(
features=tfds.features.FeaturesDict({
'image': tfds.features.Image(shape=(28, 28, 1), doc='Grayscale image'),
'label': tfds.features.ClassLabel(
names=['no', 'yes'],
doc=tfds.features.Documentation(
desc='Whether this is a picture of a cat',
value_range='yes or no'
),
),
'metadata': {
'id': tf.int64,
'timestamp': tfds.features.Scalar(
tf.int64,
doc='Timestamp when this picture was taken as seconds since epoch'),
'language': tf.string,
},
}),
)
Özellikler, yalnızca metinsel bir açıklama ( doc='description' ) kullanılarak veya daha ayrıntılı bir özellik açıklaması sağlamak için doğrudan tfds.features.Documentation kullanılarak belgelenebilir.
Özellikler şunlar olabilir:
- Skaler değerler:
tf.bool,tf.string,tf.float32,... Özelliği belgelemek istediğinizdetfds.features.Scalar(tf.int64, doc='description')da kullanabilirsiniz. -
tfds.features.Audio,tfds.features.Video,... (mevcut özelliklerin listesine bakın) - İç içe geçmiş özellikler
dict:{'metadata': {'image': Image(), 'description': tf.string} },... - İç içe
tfds.features.Sequence:Sequence({'image': ..., 'id': ...}),Sequence(Sequence(tf.int64)),...
Oluşturma sırasında örnekler, FeatureConnector.encode_example tarafından diske uygun bir formatta (şu anda tf.train.Example protokol arabellekleri) otomatik olarak serileştirilecektir:
yield {
'image': '/path/to/img0.png', # `np.array`, file bytes,... also accepted
'label': 'yes', # int (0-num_classes) also accepted
'metadata': {
'id': 43,
'language': 'en',
},
}
Veri kümesi okunurken (örn. tfds.load ile), verilerin kodu, FeatureConnector.decode_example ile otomatik olarak çözülür. Döndürülen tf.data.Dataset tfds.core.DatasetInfo içinde tanımlanan dict yapısıyla eşleşecektir:
ds = tfds.load(...)
ds.element_spec == {
'image': tf.TensorSpec(shape=(28, 28, 1), tf.uint8),
'label': tf.TensorSpec(shape=(), tf.int64),
'metadata': {
'id': tf.TensorSpec(shape=(), tf.int64),
'language': tf.TensorSpec(shape=(), tf.string),
},
}
Protokole serileştirme/seri durumdan çıkarma
TFDS, örnekleri tf.train.Example protokolüne serileştirmek/seri durumdan çıkarmak için düşük seviyeli bir API sunar.
dict[np.ndarray | Path | str | ...] bytes proto etmek için, features.serialize_example kullanın:
with tf.io.TFRecordWriter('path/to/file.tfrecord') as writer:
for ex in all_exs:
ex_bytes = features.serialize_example(data)
f.write(ex_bytes)
tf.Tensor protokol bytes seri durumdan çıkarmak için, features.deserialize_example kullanın:
ds = tf.data.TFRecordDataset('path/to/file.tfrecord')
ds = ds.map(features.deserialize_example)
Meta verilere erişme
Özelliklerin meta verilerine (etiket adları, şekil, dtype,...) erişmek için giriş belgesine bakın. Örnek:
ds, info = tfds.load(..., with_info=True)
info.features['label'].names # ['cat', 'dog', ...]
info.features['label'].str2int('cat') # 0
Kendi tfds.features.FeatureConnector oluşturun
Mevcut özellikler arasında bir özelliğin eksik olduğunu düşünüyorsanız lütfen yeni bir konu açın.
Kendi özellik bağlayıcınızı oluşturmak için tfds.features.FeatureConnector miras almanız ve soyut yöntemleri uygulamanız gerekir.
- Özelliğiniz tek bir tensör değeriyse, en iyisi
tfds.features.Tensormiras almak ve gerektiğindesuper()işlevini kullanmaktır. Örnek içintfds.features.BBoxFeaturekaynak koduna bakın. - Özelliğiniz birden fazla tensörden oluşan bir kapsa, en iyisi
tfds.features.FeaturesDictmiras almak ve alt bağlayıcıları otomatik olarak kodlamak içinsuper()işlevini kullanmaktır.
tfds.features.FeatureConnector nesnesi, özelliğin diskte nasıl kodlandığını kullanıcıya nasıl sunulduğundan soyutlar. Aşağıda veri kümesinin soyutlama katmanlarını ve ham veri kümesi dosyalarından tf.data.Dataset nesnesine dönüşümü gösteren bir diyagram bulunmaktadır.

Kendi özellik bağlayıcınızı oluşturmak için tfds.features.FeatureConnector alt sınıfını oluşturun ve soyut yöntemleri uygulayın:
-
encode_example(data):_generate_examples()oluşturucusunda verilen verilerintf.train.Exampleuyumlu verilere nasıl kodlanacağını tanımlar. Tek bir değer veya bir değerlerdictdöndürebilir. -
decode_example(data):tf.train.Exampleöğesinden okunan tensördeki verilerin kodununtf.data.Datasettarafından döndürülen kullanıcı tensörüne nasıl çözüleceğini tanımlar. -
get_tensor_info():tf.data.Datasettarafından döndürülen tensörlerin şeklini/dtipini gösterir. Başka birtfds.featuresöğesinden devralınıyorsa isteğe bağlı olabilir. - (isteğe bağlı olarak)
get_serialized_info():get_tensor_info()tarafından döndürülen bilgi, verilerin gerçekte diske yazılma şeklinden farklıysa,tf.train.Exampleözellikleriyle eşleşmesi içinget_serialized_info()nun üzerine yazmanız gerekir. -
to_json_content/from_json_content: Veri kümenizin orijinal kaynak kodu olmadan yüklenmesine izin vermek için bu gereklidir. Örnek için Ses özelliğine bakın.
Daha fazla bilgi için tfds.features.FeatureConnector belgelerine bakın. Gerçek örneklere bakmak da en iyisidir.