واجهة برمجة التطبيقات tfds.features.FeatureConnector
:
- يحدد البنية والأشكال وأنواع dtypes الخاصة بـ
tf.data.Dataset
النهائي - مجردة بعيدا التسلسل إلى/من القرص.
- الكشف عن البيانات الوصفية الإضافية (مثل أسماء التصنيفات، ومعدل عينات الصوت،...)
ملخص
يحدد tfds.features.FeatureConnector
بنية ميزات مجموعة البيانات (في tfds.core.DatasetInfo
):
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,
},
}),
)
يمكن توثيق الميزات إما باستخدام وصف نصي فقط ( doc='description'
) أو باستخدام tfds.features.Documentation
مباشرة لتوفير وصف أكثر تفصيلاً للميزات.
الميزات يمكن أن تكون:
- القيم العددية:
tf.bool
،tf.string
،tf.float32
،... عندما تريد توثيق الميزة، يمكنك أيضًا استخدامtfds.features.Scalar(tf.int64, doc='description')
. -
tfds.features.Audio
،tfds.features.Video
،... (راجع قائمة الميزات المتوفرة) -
dict
الميزات المتداخل:{'metadata': {'image': Image(), 'description': tf.string} }
،... - متداخلة
tfds.features.Sequence
:Sequence({'image': ..., 'id': ...})
,Sequence(Sequence(tf.int64))
,...
أثناء الإنشاء، سيتم إجراء تسلسل للأمثلة تلقائيًا بواسطة FeatureConnector.encode_example
في تنسيق مناسب للقرص (حاليًا المخازن المؤقتة للبروتوكول tf.train.Example
):
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',
},
}
عند قراءة مجموعة البيانات (على سبيل المثال مع tfds.load
)، يتم فك ترميز البيانات تلقائيًا باستخدام FeatureConnector.decode_example
. سوف يتطابق tf.data.Dataset
الذي تم إرجاعه مع بنية dict
المحددة في tfds.core.DatasetInfo
:
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),
},
}
تسلسل/إلغاء التسلسل إلى بروتو
يعرض TFDS واجهة برمجة تطبيقات منخفضة المستوى لإجراء تسلسل/إلغاء تسلسل الأمثلة إلى tf.train.Example
proto.
لإجراء تسلسل dict[np.ndarray | Path | str | ...]
لتحويل bytes
الأولية، استخدم features.serialize_example
:
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)
لإلغاء التسلسل وتحويل bytes
الأولية إلى tf.Tensor
، استخدم features.deserialize_example
:
ds = tf.data.TFRecordDataset('path/to/file.tfrecord')
ds = ds.map(features.deserialize_example)
الوصول إلى البيانات الوصفية
راجع مستند المقدمة للوصول إلى البيانات التعريفية للميزات (أسماء التصنيفات، الشكل، النوع dtype،...). مثال:
ds, info = tfds.load(..., with_info=True)
info.features['label'].names # ['cat', 'dog', ...]
info.features['label'].str2int('cat') # 0
قم بإنشاء tfds.features.FeatureConnector
الخاص بك
إذا كنت تعتقد أن هناك ميزة مفقودة من الميزات المتوفرة ، فيرجى فتح إصدار جديد .
لإنشاء موصل الميزات الخاص بك، تحتاج إلى الوراثة من tfds.features.FeatureConnector
وتنفيذ الأساليب المجردة.
- إذا كانت ميزتك عبارة عن قيمة موتر واحدة، فمن الأفضل أن ترث من
tfds.features.Tensor
وأن تستخدمsuper()
عند الحاجة. راجع التعليمات البرمجية المصدرtfds.features.BBoxFeature
للحصول على مثال. - إذا كانت الميزة الخاصة بك عبارة عن حاوية مكونة من موترات متعددة، فمن الأفضل أن ترث من
tfds.features.FeaturesDict
وتستخدمsuper()
لتشفير الموصلات الفرعية تلقائيًا.
يلخص كائن tfds.features.FeatureConnector
كيفية تشفير الميزة على القرص من كيفية تقديمها للمستخدم. يوجد أدناه رسم تخطيطي يوضح طبقات التجريد لمجموعة البيانات والتحويل من ملفات مجموعة البيانات الأولية إلى كائن tf.data.Dataset
.
لإنشاء موصل الميزات الخاص بك، استخدم الفئة الفرعية tfds.features.FeatureConnector
وقم بتنفيذ الطرق المجردة:
-
encode_example(data)
: يحدد كيفية تشفير البيانات الواردة في المولد_generate_examples()
إلى بيانات متوافقة معtf.train.Example
. يمكن إرجاع قيمة واحدة، أوdict
القيم. -
decode_example(data)
: يحدد كيفية فك تشفير البيانات من الموتر المقروء منtf.train.Example
إلى موتر المستخدم الذي يتم إرجاعه بواسطةtf.data.Dataset
. -
get_tensor_info()
: يشير إلى شكل/نوع الموتر (الموترات) الذي يتم إرجاعه بواسطةtf.data.Dataset
. قد يكون اختياريًا في حالة الوراثة منtfds.features
آخر. - (اختياريًا)
get_serialized_info()
: إذا كانت المعلومات التي يتم إرجاعها بواسطةget_tensor_info()
تختلف عن كيفية كتابة البيانات فعليًا على القرص، فأنت بحاجة إلى الكتابة فوقget_serialized_info()
لمطابقة مواصفاتtf.train.Example
-
to_json_content
/from_json_content
: هذا مطلوب للسماح بتحميل مجموعة البيانات الخاصة بك بدون كود المصدر الأصلي. انظر ميزة الصوت للحصول على مثال.
لمزيد من المعلومات، قم بإلقاء نظرة على وثائق tfds.features.FeatureConnector
. من الأفضل أيضًا إلقاء نظرة على أمثلة حقيقية .