tfds.features.FeatureConnector
API:
- চূড়ান্ত
tf.data.Dataset
এর গঠন, আকার, dtypes সংজ্ঞায়িত করে - ডিস্ক থেকে/থেকে সিরিয়ালাইজেশন অ্যাবস্ট্রাক্ট।
- অতিরিক্ত মেটাডেটা প্রকাশ করুন (যেমন লেবেলের নাম, অডিও নমুনা হার,...)
ওভারভিউ
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
tfds.core.DatasetInfo
তে সংজ্ঞায়িত dict
কাঠামোর সাথে মিলবে:
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
/ডিসিরিয়ালাইজ করার জন্য একটি নিম্ন-স্তরের API প্রকাশ করে।
dict[np.ndarray | Path | str | ...]
সিরিয়ালাইজ করতে 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
এ deserialize করতে, 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
দ্বারা প্রত্যাবর্তিত টেনসর(গুলি) এর আকৃতি/dtype নির্দেশ করে। অন্যtfds.features
থেকে উত্তরাধিকারী হলে ঐচ্ছিক হতে পারে। - (ঐচ্ছিকভাবে)
get_serialized_info()
:get_tensor_info()
দ্বারা প্রত্যাবর্তনকৃত তথ্য যদি ডিস্কে ডেটা আসলে যেভাবে লেখা হয় তার থেকে ভিন্ন হয়, তাহলেtf.train.Example
এর স্পেসের সাথে মেলেget_serialized_info()
ওভাররাইট করতে হবে। -
to_json_content
/from_json_content
: মূল সোর্স কোড ছাড়াই আপনার ডেটাসেট লোড করার অনুমতি দেওয়ার জন্য এটি প্রয়োজন। একটি উদাহরণের জন্য অডিও বৈশিষ্ট্য দেখুন.
আরও তথ্যের জন্য, tfds.features.FeatureConnector
ডকুমেন্টেশন দেখুন। বাস্তব উদাহরণগুলি তাকানও ভাল।