ফিচার সংযোগকারী

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 ডকুমেন্টেশন দেখুন। বাস্তব উদাহরণগুলি তাকানও ভাল।