আপনার যদি একটি tf.train.Example
প্রোটো থাকে ( .tfrecord
, .riegeli
,... এর ভিতরে), যা তৃতীয় পক্ষের সরঞ্জাম দ্বারা তৈরি করা হয়েছে, যা আপনি সরাসরি tfds API দিয়ে লোড করতে চান, তাহলে এই পৃষ্ঠাটি আপনার জন্য।
আপনার .tfrecord
ফাইলগুলি লোড করার জন্য, আপনাকে শুধুমাত্র এটি করতে হবে:
- TFDS নামকরণের নিয়ম অনুসরণ করুন।
- আপনার tfrecord ফাইলগুলির সাথে মেটাডেটা ফাইলগুলি (
dataset_info.json
,features.json
) যুক্ত করুন৷
সীমাবদ্ধতা:
-
tf.train.SequenceExample
সমর্থিত নয়, শুধুমাত্রtf.train.Example
। - আপনাকে
tfds.features
এর পরিপ্রেক্ষিতেtf.train.Example
প্রকাশ করতে সক্ষম হতে হবে (নীচের বিভাগটি দেখুন)।
ফাইল নামকরণ কনভেনশন
TFDS ফাইলের নামের জন্য একটি টেমপ্লেট সংজ্ঞায়িত করতে সমর্থন করে, যা বিভিন্ন ফাইল নামকরণ স্কিম ব্যবহার করার জন্য নমনীয়তা প্রদান করে। টেমপ্লেটটি একটি tfds.core.ShardedFileTemplate
দ্বারা প্রতিনিধিত্ব করে এবং নিম্নলিখিত ভেরিয়েবলগুলিকে সমর্থন করে: {DATASET}
, {SPLIT}
, {FILEFORMAT}
, {SHARD_INDEX}
, {NUM_SHARDS}
, এবং {SHARD_X_OF_Y}
। উদাহরণস্বরূপ, TFDS-এর ডিফল্ট ফাইল নামকরণ স্কিম হল: {DATASET}-{SPLIT}.{FILEFORMAT}-{SHARD_X_OF_Y}
। MNIST-এর জন্য, এর মানে হল যে ফাইলের নামগুলি নিম্নরূপ দেখায়:
-
mnist-test.tfrecord-00000-of-00001
-
mnist-train.tfrecord-00000-of-00001
মেটাডেটা যোগ করুন
বৈশিষ্ট্য গঠন প্রদান
TFDS tf.train.Example
প্রোটোকে ডিকোড করতে সক্ষম হওয়ার জন্য, আপনাকে tfds.features
স্ট্রাকচারটি আপনার চশমার সাথে মেলে। যেমন:
features = tfds.features.FeaturesDict({
'image':
tfds.features.Image(
shape=(256, 256, 3),
doc='Picture taken by smartphone, downscaled.'),
'label':
tfds.features.ClassLabel(names=['dog', 'cat']),
'objects':
tfds.features.Sequence({
'camera/K': tfds.features.Tensor(shape=(3,), dtype=tf.float32),
}),
})
নিম্নলিখিত tf.train.Example
speces এর সাথে মিলে যায়:
{
'image': tf.io.FixedLenFeature(shape=(), dtype=tf.string),
'label': tf.io.FixedLenFeature(shape=(), dtype=tf.int64),
'objects/camera/K': tf.io.FixedLenSequenceFeature(shape=(3,), dtype=tf.int64),
}
বৈশিষ্ট্যগুলি নির্দিষ্ট করে TFDS স্বয়ংক্রিয়ভাবে ছবি, ভিডিও,... ডিকোড করার অনুমতি দেয় অন্যান্য TFDS ডেটাসেটের মতো, বৈশিষ্ট্য মেটাডেটা (যেমন লেবেলের নাম,...) ব্যবহারকারীর কাছে উন্মুক্ত করা হবে (যেমন info.features['label'].names
)
আপনি যদি প্রজন্মের পাইপলাইন নিয়ন্ত্রণ করেন
আপনি যদি TFDS-এর বাইরে ডেটাসেট তৈরি করেন কিন্তু তারপরও জেনারেশন পাইপলাইন নিয়ন্ত্রণ করেন, তাহলে আপনি tfds.features.FeatureConnector.serialize_example
ব্যবহার করতে পারেন আপনার ডেটা এনকোড করতে dict[np.ndarray]
থেকে tf.train.Example
প্রোটো bytes
:
with tf.io.TFRecordWriter('path/to/file.tfrecord') as writer:
for ex in all_exs:
ex_bytes = features.serialize_example(data)
writer.write(ex_bytes)
এটি TFDS-এর সাথে বৈশিষ্ট্যের সামঞ্জস্য নিশ্চিত করবে।
একইভাবে, প্রোটো ডিকোড করার জন্য একটি feature.deserialize_example
বিদ্যমান রয়েছে ( উদাহরণ )
আপনি যদি প্রজন্মের পাইপলাইন নিয়ন্ত্রণ না করেন
একটি tf.train.Example
এ tfds.features
কিভাবে উপস্থাপন করা হয় তা দেখতে চাইলে, আপনি এটি colab-এ পরীক্ষা করতে পারেন:
-
tfds.features
tf.train.Example
এর মানব পাঠযোগ্য কাঠামোতে অনুবাদ করতে, আপনিfeatures.get_serialized_info()
কল করতে পারেন। - সঠিক
FixedLenFeature
পেতে,... spec পাস করা হয়েছেtf.io.parse_single_example
, আপনিspec = features.tf_example_spec
ব্যবহার করতে পারেন
বিভাজনের পরিসংখ্যান পান
TFDS-এর জন্য প্রতিটি শার্ডের মধ্যে উদাহরণের সঠিক সংখ্যা জানতে হবে। এটি len(ds)
, বা সাবপ্লিট API : split='train[75%:]'
এর মতো বৈশিষ্ট্যগুলির জন্য প্রয়োজন।
আপনার কাছে এই তথ্য থাকলে, আপনি স্পষ্টভাবে
tfds.core.SplitInfo
এর একটি তালিকা তৈরি করতে পারেন এবং পরবর্তী বিভাগে যেতে পারেন:split_infos = [ tfds.core.SplitInfo( name='train', shard_lengths=[1024, ...], # Num of examples in shard0, shard1,... num_bytes=0, # Total size of your dataset (if unknown, set to 0) ), tfds.core.SplitInfo(name='test', ...), ]
আপনি যদি এই তথ্য না জানেন, তাহলে আপনি
compute_split_info.py
স্ক্রিপ্ট (অথবাtfds.folder_dataset.compute_split_info
সহ আপনার নিজস্ব স্ক্রিপ্টে) ব্যবহার করে এটি গণনা করতে পারেন। এটি একটি বিম পাইপলাইন চালু করবে যা প্রদত্ত ডিরেক্টরিতে সমস্ত শার্ড পড়বে এবং তথ্য গণনা করবে।
মেটাডেটা ফাইল যোগ করুন
আপনার ডেটাসেটের সাথে সঠিক মেটাডেটা ফাইলগুলি স্বয়ংক্রিয়ভাবে যুক্ত করতে, tfds.folder_dataset.write_metadata
ব্যবহার করুন :
tfds.folder_dataset.write_metadata(
data_dir='/path/to/my/dataset/1.0.0/',
features=features,
# Pass the `out_dir` argument of compute_split_info (see section above)
# You can also explicitly pass a list of `tfds.core.SplitInfo`.
split_infos='/path/to/my/dataset/1.0.0/',
# Pass a custom file name template or use None for the default TFDS
# file name template.
filename_template='{SPLIT}-{SHARD_X_OF_Y}.{FILEFORMAT}',
# Optionally, additional DatasetInfo metadata can be provided
# See:
# https://www.tensorflow.org/datasets/api_docs/python/tfds/core/DatasetInfo
description="""Multi-line description."""
homepage='http://my-project.org',
supervised_keys=('image', 'label'),
citation="""BibTex citation.""",
)
আপনার ডেটাসেট ডিরেক্টরিতে একবার ফাংশনটি কল করা হলে, মেটাডেটা ফাইলগুলি ( dataset_info.json
,...) যোগ করা হয়েছে এবং আপনার ডেটাসেটগুলি TFDS এর সাথে লোড করার জন্য প্রস্তুত (পরবর্তী বিভাগটি দেখুন)।
TFDS এর সাথে ডেটাসেট লোড করুন
সরাসরি ফোল্ডার থেকে
একবার মেটাডেটা তৈরি হয়ে গেলে, ডেটাসেটগুলি tfds.builder_from_directory
ব্যবহার করে লোড করা যেতে পারে যা একটি tfds.core.DatasetBuilder
স্ট্যান্ডার্ড TFDS API (যেমন tfds.builder
):
builder = tfds.builder_from_directory('~/path/to/my_dataset/3.0.0/')
# Metadata are available as usual
builder.info.splits['train'].num_examples
# Construct the tf.data.Dataset pipeline
ds = builder.as_dataset(split='train[75%:]')
for ex in ds:
...
সরাসরি একাধিক ফোল্ডার থেকে
একাধিক ফোল্ডার থেকে ডেটা লোড করাও সম্ভব। এটি ঘটতে পারে, উদাহরণস্বরূপ, শক্তিবৃদ্ধি শেখার ক্ষেত্রে যখন একাধিক এজেন্ট প্রত্যেকে একটি পৃথক ডেটাসেট তৈরি করে এবং আপনি সেগুলিকে একসাথে লোড করতে চান। অন্যান্য ব্যবহারের ক্ষেত্রে যখন একটি নতুন ডেটাসেট নিয়মিতভাবে উত্পাদিত হয়, যেমন প্রতিদিন একটি নতুন ডেটাসেট, এবং আপনি একটি তারিখ পরিসর থেকে ডেটা লোড করতে চান৷
একাধিক ফোল্ডার থেকে ডেটা লোড করতে, tfds.builder_from_directories
ব্যবহার করুন, যা স্ট্যান্ডার্ড TFDS API (যেমন tfds.builder
) সহ একটি tfds.core.DatasetBuilder
প্রদান করে :
builder = tfds.builder_from_directories(builder_dirs=[
'~/path/my_dataset/agent1/1.0.0/',
'~/path/my_dataset/agent2/1.0.0/',
'~/path/my_dataset/agent3/1.0.0/',
])
# Metadata are available as usual
builder.info.splits['train'].num_examples
# Construct the tf.data.Dataset pipeline
ds = builder.as_dataset(split='train[75%:]')
for ex in ds:
...
ফোল্ডার গঠন (ঐচ্ছিক)
TFDS-এর সাথে আরও ভাল সামঞ্জস্যের জন্য, আপনি আপনার ডেটা <data_dir>/<dataset_name>[/<dataset_config>]/<dataset_version>
হিসাবে সংগঠিত করতে পারেন। যেমন:
data_dir/
dataset0/
1.0.0/
1.0.1/
dataset1/
config0/
2.0.0/
config1/
2.0.0/
এটি আপনার ডেটাসেটগুলিকে tfds.load
/ tfds.builder
API-এর সাথে সামঞ্জস্যপূর্ণ করে তুলবে, শুধুমাত্র data_dir/
প্রদান করে :
ds0 = tfds.load('dataset0', data_dir='data_dir/')
ds1 = tfds.load('dataset1/config0', data_dir='data_dir/')